图像显示在 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 月发布。
我正在尝试创建一个包含一些图像的 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 月发布。