图像显示在 pdf 的边框之外。阿帕奇FOP

Images are shown out of the border of the pdf. Apache FOP

我正在尝试创建一个包含一些图像的 pdf 文档。我的问题是图像超出了文档的边界。我正在使用 Apache FOP 1.1。

这是xsl-fo文件:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" line-stacking-strategy="font-height">
    <fo:layout-master-set>
        <fo:simple-page-master margin-bottom="36pt" margin-left="72pt" margin-right="72pt" margin-top="36pt" master-name="pm0" page-height="792pt" page-width="612pt">
            <fo:region-body margin-bottom="36pt" margin-top="36pt" overflow="visible" region-name="body"/>
            <fo:region-before extent="720pt" overflow="visible" region-name="header"/>
            <fo:region-after display-align="after" extent="720pt" overflow="visible" region-name="footer"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="pm0" orphans="2" white-space-collapse="false" widows="2">
        <fo:flow flow-name="body">
            <fo:block end-indent="0pt" line-height="13.55pt" space-after="8pt" start-indent="0pt" text-align="start" text-indent="0pt">
                <fo:inline font-family="Calibri, sans-serif" font-size="11pt">TEST1</fo:inline>
            </fo:block>
            <fo:block end-indent="0pt" line-height="13.55pt" space-after="8pt" start-indent="0pt" text-align="start" text-indent="0pt">
                <fo:external-graphic content-height="214.55pt" content-width="310.55pt" height="214.55pt" scaling="non-uniform" src="url('file:///C:/Development_Test/test1.png')" width="310.55pt"/>
            </fo:block>
            <fo:block end-indent="0pt" line-height="13.55pt" space-after="8pt" start-indent="0pt" text-align="start" text-indent="0pt">
                <fo:inline font-family="Calibri, sans-serif" font-size="11pt">TEST2</fo:inline>
            </fo:block>
            <fo:block end-indent="0pt" line-height="13.55pt" space-after="8pt" start-indent="0pt" text-align="start" text-indent="0pt">
                <fo:external-graphic content-height="356.35pt" content-width="139.9pt" height="356.35pt" scaling="non-uniform" src="url('file:///C:/Development_Test/test2.png')" width="139.9pt"/>
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

创建的 pdf 如下所示:

我认为问题出在 fo:root 中设置了属性 line-stacking-strategy="font-height",因此它的值被 FO 文档中的所有块继承。

根据 XSL recommendation,值 font-height 使处理器使用 nominal-requested-line-rectangle 构建线,这意味着只有fo:block 的属性将在计算行高时考虑在内, 忽略内联元素,例如 fo:external-graphic.

换句话说,由于所有 fo:block 元素都具有 line-height="13.55pt",因此 FO 处理器会创建高度恰好为 13.55pt 的行,而不管块内的内容是什么。较高的图像然后根据 vertical-align(默认为 baseline)放置在这些行中,溢出前面的行和页边距。

解决方法:改用line-stacking-strategy="max-height";您可能还想在图像上设置 vertical-align

最后一条警告:您使用的是 5 岁 版本的 FOP;目前最新版本是 2.2,于 2017 年 4 月发布。