【问题标题】:XSL-FO to PDF translation produces unexpected resultXSL-FO 到 PDF 的翻译产生了意想不到的结果
【发布时间】:2019-04-15 19:01:48
【问题描述】:

这是我要转换为 PDF 的 XSL-FO。当我使用 Apache FOP 时,在第一个表中,第二行元素叠加在第一行的第二个单元格上。这是出乎意料的行为,因为第二个表渲染得很好。

您可以使用this online renderer 查看生成的输出。 将 XML 代码粘贴到第三个框中并转换为 pdf。 我的 xsl-fo 有问题吗?据我所知,这两个表在功能上是相同的

<?xml version="1.0" encoding="utf-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="letter" page-height="11in" page-width="8.5in" margin-top="0.5in"
                               margin-bottom="0.5in" margin-left="0.5in" margin-right="0.5in">
            <fo:region-body region-name="xsl-region-body" column-count="2"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="letter">
        <fo:flow flow-name="xsl-region-body">
            <fo:block span="all" font-size="16pt" font-weight="bold" margin-top="9pt">
                <fo:inline text-decoration="underline">Sales Info</fo:inline>
            </fo:block>
            <fo:table table-layout="fixed" font-size="12pt">
                <fo:table-column column-width="2.25in"/>
                <fo:table-column column-width="1.5in"/>
                <fo:table-column column-width="2.25in"/>
                <fo:table-column column-width="1.5in"/>
                <fo:table-body>
                    <fo:table-row>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Name </fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: 12314</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Office Phone</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: -</fo:block>
                        </fo:table-cell>
                    </fo:table-row>
                    <fo:table-row>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Email1</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: -</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Email 2</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: -</fo:block>
                        </fo:table-cell>
                    </fo:table-row>
                </fo:table-body>
            </fo:table>
            <fo:block span="all" font-size="16pt" font-weight="bold" margin-top="9pt">
                <fo:inline text-decoration="underline">Order</fo:inline>
            </fo:block>
            <fo:table table-layout="fixed" font-size="12pt">
                <fo:table-column column-width="2.25in"/>
                <fo:table-column column-width="1.5in"/>
                <fo:table-column column-width="2.25in"/>
                <fo:table-column column-width="1.5in"/>
                <fo:table-body>
                    <fo:table-row>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Number</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: asdasd</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Type</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: A</fo:block>
                        </fo:table-cell>
                    </fo:table-row>
                    <fo:table-row>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Region</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: 12341</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">Location</fo:block>
                        </fo:table-cell>
                        <fo:table-cell>
                            <fo:block font-size="12pt">: 12341</fo:block>
                        </fo:table-cell>
                    </fo:table-row>

                </fo:table-body>
            </fo:table>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

【问题讨论】:

    标签: xsl-fo apache-fop


    【解决方案1】:

    我用 AH Formatter 得到了相同的结果,当我第一次看到它时,我和你一样困惑。

    您的fo:region-bodycolumn-count="2"。由于以下&lt;fo:block span="all" ...&gt;,您会看到第一个表跨越两列。

    第二个表格不会中断,因为格式化程序通常会在将内容放入第二列之前填充一列。带有span="all" 的块使格式化程序想要在放置块之前平衡列。如果您在第二个表之后放置另一个这些块,则第二个表的行为将类似。

    无论如何,您的表格对于单列来说太宽了。第二个表看起来可以正常工作,但实际上每一行都溢出了第二列的宽度。

    span 仅适用于 fo:blockfo:block-container,因此不适用于 fo:table。解决方案是将fo:table 放在具有span="all"fo:blockfo:block-container 中,以便您的表格占据页面的整个宽度并且不会跨列。

    或者,如果没有任何内容要格式化为两列,那么您可以去掉 column-count="2" 和所有 span="all"

    【讨论】:

      猜你喜欢
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2011-06-04
      相关资源
      最近更新 更多