首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >XSL-FO到PDF的转换产生意外的结果

XSL-FO到PDF的转换产生意外的结果
EN

Stack Overflow用户
提问于 2019-04-16 03:01:49
回答 1查看 123关注 0票数 0

这是我试图转换为PDF的XSL-FO。当我使用Apache FOP时,在第一个表中,第二行元素叠加在第一行的第二个单元格上。这是意想不到的行为,因为第二个表呈现得很好。

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

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-16 03:46:16

我用AH格式化程序得到了同样的结果,当我第一次看到它的时候,我和你一样困惑。

您的fo:region-bodycolumn-count="2"。由于下面的<fo:block span="all" ...>,您将看到第一个表在两列之间断开。

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

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

span仅适用于fo:blockfo:block-container,因此不适用于fo:table。解决方案是将fo:table放在具有span="all"fo:blockfo:block-container中,这样您的表就可以使用整个页面的宽度,并且不会在列之间断开。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55695728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档