【问题】
Docbook的pdf中,
正常表格式是这样的:
但是当表格在quote中的时候,就变成这样了:
即表格的头部header跑到底端了。
而且,如果单个entry的内容是多行的话,结果还会显示出多行:
所以,整个显示都是完全乱套了。
【解决过程】
1.直觉能想到的就是,去fo对应的table的xsl中去找找是否有相关的配置。
对应文件是:
docbook-xsl-ns-1.76.1\fo\table.xsl
2.把之前在table设置中自己添加的,给table的header添加背景色的设置:
1 2 3 | < xsl:if test = "ancestor::d:thead" > < xsl:attribute name = "background-color" >antiquewhite</ xsl:attribute > </ xsl:if > |
去掉后,结果问题依旧。
3.后来去对比了一下,关于正常的表格和quote中不正常的表格所对应的fo中的内容。
正常的表格的fo内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | < fo:block id = "tbl.global_synopsis" keep-together.within-column = "auto" space-before.minimum = "0.5em" space-before.optimum = "1em" space-before.maximum = "2em" space-after.minimum = "0.5em" space-after.optimum = "1em" space-after.maximum = "2em" > < fo:block font-weight = "bold" font-size = "12pt" hyphenate = "false" space-after.minimum = "0.4em" space-after.optimum = "0.6em" space-after.maximum = "0.8em" text-align = "center" space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" keep-with-next.within-column = "always" >表 1.1. global的语法</ fo:block > < fo:table border-before-width.conditionality = "retain" border-collapse = "collapse" border-start-style = "solid" border-end-style = "solid" border-top-style = "solid" border-bottom-style = "solid" border-start-width = "1.5pt" border-end-width = "1.5pt" border-top-width = "1.5pt" border-bottom-width = "1.5pt" border-start-color = "black" border-end-color = "black" border-top-color = "black" border-bottom-color = "black" table-layout = "fixed" width = "100%" > < fo:table-column column-number = "1" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "2" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "3" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "4" column-width = "proportional-column-width(1)" /> < fo:table-header xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row keep-with-next.within-column = "always" > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block font-weight = "bold" >Directive</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block font-weight = "bold" >Description</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block font-weight = "bold" >Syntax</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" >< fo:block font-weight = "bold" >Example</ fo:block ></ fo:table-cell > </ fo:table-row > </ fo:table-header > < fo:table-body xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block >< fo:inline color = "brown" >.global</ fo:inline ></ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >Makes < fo:inline color = "brown" >symbol</ fo:inline > visible to the linker</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >.global symbol</ fo:block ></ fo:table-cell >< fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" >< fo:block >< fo:inline color = "brown" >.global</ fo:inline > MyAsmFunc</ fo:block ></ fo:table-cell ></ fo:table-row >< fo:table-row >< fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >< fo:inline color = "brown" >.globl</ fo:inline ></ fo:block ></ fo:table-cell >< fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >Same as < fo:inline color = "brown" >.global</ fo:inline ></ fo:block ></ fo:table-cell >< fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >.globl symbol</ fo:block ></ fo:table-cell >< fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" >< fo:block >< fo:inline color = "brown" >.globl</ fo:inline > MyOtherAsmFunc</ fo:block ></ fo:table-cell ></ fo:table-row ></ fo:table-body > </ fo:table > </ fo:block > |
quote中不正常的表格:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | < fo:block id = "tbl.balignl_syntax" keep-together.within-column = "auto" space-before.minimum = "0.5em" space-before.optimum = "1em" space-before.maximum = "2em" space-after.minimum = "0.5em" space-after.optimum = "1em" space-after.maximum = "2em" > < fo:block font-weight = "bold" font-size = "12pt" hyphenate = "false" space-after.minimum = "0.4em" space-after.optimum = "0.6em" space-after.maximum = "0.8em" text-align = "center" space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" keep-with-next.within-column = "always" >表 1.3. balignl的语法</ fo:block > < fo:table border-before-width.conditionality = "retain" border-collapse = "collapse" border-start-style = "solid" border-end-style = "solid" border-top-style = "solid" border-bottom-style = "solid" border-start-width = "1.5pt" border-end-width = "1.5pt" border-top-width = "1.5pt" border-bottom-width = "1.5pt" border-start-color = "black" border-end-color = "black" border-top-color = "black" border-bottom-color = "black" table-layout = "fixed" width = "100%" > < fo:table-column column-number = "1" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "2" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "3" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "4" column-width = "proportional-column-width(1)" /> < fo:table-header xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row keep-with-next.within-column = "always" > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block font-weight = "bold" >Directive</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block font-weight = "bold" >Description</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block font-weight = "bold" >Syntax</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" >< fo:block font-weight = "bold" >Example</ fo:block ></ fo:table-cell > </ fo:table-row > </ fo:table-header > < fo:table-body xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block >< fo:inline color = "brown" >.balignl</ fo:inline ></ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >Word align the following code to < fo:inline color = "brown" >alignment</ fo:inline > byte boundary (< fo:inline color = "brown" >default=4</ fo:inline >). Fill skipped words with < fo:inline color = "brown" >fill</ fo:inline > (< fo:inline color = "brown" >default=0 or NOP</ fo:inline >). If the number of bytes skipped is greater than max, then don't align (< fo:inline color = "brown" >default=alignment</ fo:inline > ).</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" >< fo:block >.balignl {alignment} {, fill} {, max}</ fo:block ></ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" >< fo:block >< fo:inline color = "brown" >.balignl</ fo:inline ></ fo:block ></ fo:table-cell ></ fo:table-row ></ fo:table-body > </ fo:table > </ fo:block > |
对比后的结果,除了发现如下这一点点不一样的:
1 | border-bottom-width="0.5pt" border-bottom-style="solid" border-bottom-color="green" |
其他好像也没看到有什么有意义的区别。
对于上述的border-bottom-width,border-bottom-style,border-bottom-color等配置,也好像和table的header的位置前后,没啥关系。
4.经过了千辛万苦的折腾,比较出来一个结果。
那就是,在正常的,不带quote的table的源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < table id = "tbl.dot_word_syntax" >< title >.word的语法</ title > < tgroup cols = "4" > < colspec colnum = "1" colname = "col1" colwidth = "1*" /> < colspec colnum = "2" colname = "col2" colwidth = "1*" /> < colspec colnum = "3" colname = "col3" colwidth = "1*" /> < colspec colnum = "4" colname = "col4" colwidth = "1*" /> < thead > < row >< entry >Directive</ entry >< entry >Description</ entry >< entry >Syntax</ entry >< entry >Example</ entry ></ row > </ thead > < tbody > < row >< entry >< emphasis >.word</ emphasis ></ entry >< entry >Define word < emphasis >expr</ emphasis > (32bit numbers)</ entry >< entry >.word expr {, …}</ entry >< entry >< emphasis >.word</ emphasis > 144511, 0x11223</ entry ></ row > </ tbody > </ tgroup > </ table > |
生成出来的(加上相关内容)的fo源码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | ”</ fo:inline > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > < fo:basic-link external-destination = "url(https://re-eject.gbadev.org/files/GasARMRef.pdf)" color = "blue" text-decoration = "underline" > </ fo:block > < fo:block id = "tbl.dot_word_syntax" keep-together.within-column = "auto" space-before.minimum = "0.5em" space-before.optimum = "1em" space-before.maximum = "2em" space-after.minimum = "0.5em" space-after.optimum = "1em" space-after.maximum = "2em" > < fo:block font-weight = "bold" font-size = "12pt" hyphenate = "false" space-after.minimum = "0.4em" space-after.optimum = "0.6em" space-after.maximum = "0.8em" text-align = "center" space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" keep-with-next.within-column = "always" > 表 1.2. .word的语法</ fo:block > < fo:table border-before-width.conditionality = "retain" border-collapse = "collapse" border-start-style = "solid" border-end-style = "solid" border-top-style = "solid" border-bottom-style = "solid" border-start-width = "1.5pt" border-end-width = "1.5pt" border-top-width = "1.5pt" border-bottom-width = "1.5pt" border-start-color = "black" border-end-color = "black" border-top-color = "black" border-bottom-color = "black" table-layout = "fixed" width = "100%" > < fo:table-column column-number = "1" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "2" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "3" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "4" column-width = "proportional-column-width(1)" /> < fo:table-header xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row keep-with-next.within-column = "always" > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block font-weight = "bold" > Directive</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block font-weight = "bold" > Description</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block font-weight = "bold" > Syntax</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" > < fo:block font-weight = "bold" > Example</ fo:block > </ fo:table-cell > </ fo:table-row > </ fo:table-header > < fo:table-body xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block > < fo:inline color = "brown" > .word</ fo:inline > </ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block > Define word < fo:inline color = "brown" > expr</ fo:inline > (32bit numbers)</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block > .word expr {, …}</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" > < fo:block > < fo: inline color = "brown" > .word</ fo:inline > 144511, 0x11223</ fo:block > </ fo:table-cell > </ fo:table-row > </ fo:table-body > </ fo:table > </ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 所以上面的含义,以_undefined_instruction为例,就是,此处分配了一个word=32bit=4字节的地址空间,里面存放的值是undefined_instruction。</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 而此处_undefined_instruction也就是该地址空间的地址了。用C语言来表达就是:</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > _undefined_instruction = &undefined_instruction</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 或</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > *_undefined_instruction = undefined_instruction</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 在后面的代码,我们可以看到,undefined_instruction也是一个标号,即一个地址值,对应着就是在发生“未定义指令”的时候,系统所要去执行的代码。</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > (其他几个对应的“软件中断”,“预取指错误”,“数据错误”,“未定义”,“(普通)中断”,“快速中断”,也是同样的做法,跳转到对应的位置执行对应的代码。)</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 所以:</ fo:block > < fo:block id = "id9309178" wrap-option = "wrap" text-align = "start" space-before.minimum = "0.8em" space-before.optimum = "1em" space-before.maximum = "1.2em" space-after.minimum = "0.8em" space-after.optimum = "1em" space-after.maximum = "1.2em" hyphenate = "false" white-space-collapse = "false" white-space-treatment = "preserve" linefeed-treatment = "preserve" font-family = "Microsoft YaHei" background-color = "#F4F4F4" padding = "1pt" > ldr pc, 标号1 |
而带quote的xml源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < quote > < table id = "tbl.dot_word_syntax" >< title >.word的语法</ title > < tgroup cols = "4" > < colspec colnum = "1" colname = "col1" colwidth = "1*" /> < colspec colnum = "2" colname = "col2" colwidth = "1*" /> < colspec colnum = "3" colname = "col3" colwidth = "1*" /> < colspec colnum = "4" colname = "col4" colwidth = "1*" /> < thead > < row >< entry >Directive</ entry >< entry >Description</ entry >< entry >Syntax</ entry >< entry >Example</ entry ></ row > </ thead > < tbody > < row >< entry >< emphasis >.word</ emphasis ></ entry >< entry >Define word < emphasis >expr</ emphasis > (32bit numbers)</ entry >< entry >.word expr {, …}</ entry >< entry >< emphasis >.word</ emphasis > 144511, 0x11223</ entry ></ row > </ tbody > </ tgroup > </ table > </ quote > |
生成的结果是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | ”</ fo:inline > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > < fo:basic-link external-destination = "url(https://re-eject.gbadev.org/files/GasARMRef.pdf)" color = "blue" text-decoration = "underline" > </ fo:block > < fo:inline > “ < fo:block id = "tbl.dot_word_syntax" keep-together.within-column = "auto" space-before.minimum = "0.5em" space-before.optimum = "1em" space-before.maximum = "2em" space-after.minimum = "0.5em" space-after.optimum = "1em" space-after.maximum = "2em" > < fo:block font-weight = "bold" font-size = "12pt" hyphenate = "false" space-after.minimum = "0.4em" space-after.optimum = "0.6em" space-after.maximum = "0.8em" text-align = "center" space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" keep-with-next.within-column = "always" > 表 1.2. .word的语法</ fo:block > < fo:table border-before-width.conditionality = "retain" border-collapse = "collapse" border-start-style = "solid" border-end-style = "solid" border-top-style = "solid" border-bottom-style = "solid" border-start-width = "1.5pt" border-end-width = "1.5pt" border-top-width = "1.5pt" border-bottom-width = "1.5pt" border-start-color = "black" border-end-color = "black" border-top-color = "black" border-bottom-color = "black" table-layout = "fixed" width = "100%" > < fo:table-column column-number = "1" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "2" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "3" column-width = "proportional-column-width(1)" /> < fo:table-column column-number = "4" column-width = "proportional-column-width(1)" /> < fo:table-header xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row keep-with-next.within-column = "always" > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block font-weight = "bold" > Directive</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block font-weight = "bold" > Description</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block font-weight = "bold" > Syntax</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" background-color = "antiquewhite" border-bottom-width = "0.5pt" border-bottom-style = "solid" border-bottom-color = "green" > < fo:block font-weight = "bold" > Example</ fo:block > </ fo:table-cell > </ fo:table-row > </ fo:table-header > < fo:table-body xmlns:rx = "http://www.renderx.com/XSL/Extensions" start-indent = "0pt" end-indent = "0pt" > < fo:table-row > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block > < fo:inline color = "brown" > .word</ fo:inline > </ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block > Define word < fo:inline color = "brown" > expr</ fo:inline > (32bit numbers)</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" border-end-width = "0.5pt" border-end-style = "solid" border-end-color = "green" > < fo:block > .word expr {, …}</ fo:block > </ fo:table-cell > < fo:table-cell padding-start = "2pt" padding-end = "2pt" padding-top = "2pt" padding-bottom = "2pt" > < fo:block > < fo:inline color = "brown" > .word</ fo:inline > 144511, 0x11223</ fo:block > </ fo:table-cell > </ fo:table-row > </ fo:table-body > </ fo:table > </ fo:block > ”</ fo:inline > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 所以上面的含义,以_undefined_instruction为例,就是,此处分配了一个word=32bit=4字节的地址空间,里面存放的值是undefined_instruction。</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 而此处_undefined_instruction也就是该地址空间的地址了。用C语言来表达就是:</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > _undefined_instruction = &undefined_instruction</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 或</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > *_undefined_instruction = undefined_instruction</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 在后面的代码,我们可以看到,undefined_instruction也是一个标号,即一个地址值,对应着就是在发生“未定义指令”的时候,系统所要去执行的代码。</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > (其他几个对应的“软件中断”,“预取指错误”,“数据错误”,“未定义”,“(普通)中断”,“快速中断”,也是同样的做法,跳转到对应的位置执行对应的代码。)</ fo:block > < fo:block space-before.optimum = "1em" space-before.minimum = "0.8em" space-before.maximum = "1.2em" > 所以:</ fo:block > < fo:block id = "id9309181" wrap-option = "wrap" text-align = "start" space-before.minimum = "0.8em" space-before.optimum = "1em" space-before.maximum = "1.2em" space-after.minimum = "0.8em" space-after.optimum = "1em" space-after.maximum = "1.2em" hyphenate = "false" white-space-collapse = "false" white-space-treatment = "preserve" linefeed-treatment = "preserve" font-family = "Microsoft YaHei" background-color = "#F4F4F4" padding = "1pt" > ldr pc, 标号1 |
结果比较,后者,即带quote的,不正常的那个,生成的结果,前后多了个fo:inline和引号:
<fo:inline>
“<fo:block id="tbl.dot_word_syntax"
…….
</fo:block>
”</fo:inline>
而两种table的fo的源码,都是完全一样的。
那就说明,就是加了fo:inline和引号,导致fop转换为pdf,导致了表格的头部跑到底部去了。
所以,现在就是去搞懂,为何会这样。
5.从官网中找到关于quote的解释,果然如我猜测,quote的确只是针对inline的,而根据之前的知识,fo格式化输出内容的话,一种是inline,主用于单个,单行文字类的,还有一种是block,而此处,由于添加了quote,导致输出fo中,变成了一个inline中包含table等block内容,所以,显示异常的话,那也就在清理之中了。
然后又在官网中找到了,如果对于block的quote,可以用blockquote,现在去试试。
即,把之前的quote改为blockquote,变成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | < blockquote > < table id = "tbl.dot_word_syntax" >< title >.word的语法</ title > < tgroup cols = "4" > < colspec colnum = "1" colname = "col1" colwidth = "1*" /> < colspec colnum = "2" colname = "col2" colwidth = "1*" /> < colspec colnum = "3" colname = "col3" colwidth = "1*" /> < colspec colnum = "4" colname = "col4" colwidth = "1*" /> < thead > < row >< entry >Directive</ entry >< entry >Description</ entry >< entry >Syntax</ entry >< entry >Example</ entry ></ row > </ thead > < tbody > < row >< entry >< emphasis >.word</ emphasis ></ entry >< entry >Define word < emphasis >expr</ emphasis > (32bit numbers)</ entry >< entry >.word expr {, …}</ entry >< entry >< emphasis >.word</ emphasis > 144511, 0x11223</ entry ></ row > </ tbody > </ tgroup > </ table > </ blockquote > |
然后生成的fo中,对应的在表格的fo源码前后的fo:inline,也变成了fo:block了,然后再生成pdf,其中的表格的显示,也就正常了,表格的头部,也就显示在表格上面,不是底部了:
【总结】
表格的头部显示在底部了,以及表格中单个entry中多行内容的话,会导致显示出多行的内容,其原因在于是把block等类型的table等内容,放在了本属于inline性质的quote中,导致生成的fo源码中,block等类型的table等内容的前后,加上了一个fo:inline,导致显示结果错乱,出现表格头部跑到底部,单格内容多行显示等问题。
解决办法很简单,把quote改为对应的blockquote,即可。
这样blockquote中,即使包含了block类型的table等内容,也可以正常格式化成block输出了。
转载请注明:在路上 » 【已解决】Docbook生成的pdf中,当表格在quote中时,表格头部却在底端显示,而且如果内容是多行的,还会显示出多行