我正在使用ApacheFOP创建一个pdf,它在每个页面上都有多页内容和一个水印(半透明)。我在使用XSLFO时遇到了很多困难,并且使用列表功能得到了概念验证 - 但是我想有一种更简单的方法。更熟悉xslfo的人能提供更简单的解决方案吗?以下是我的代码:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:param name="watermarkPath" />
<xsl:param name="pdfPages" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page"
page-height="11in" page-width="8.5in" margin="0.5in">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="my-page">
<fo:flow flow-name="xsl-region-body">
<xsl:for-each select="$pdfPages">
<fo:block-container>
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block>
<fo:external-graphic
content-width="7.5in">
<xsl:attribute name="src">
<xsl:value-of
select="concat('data:image/png;base64,',.)" />
</xsl:attribute>
</fo:external-graphic>
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="body-start()">
<fo:block>
<fo:external-graphic
content-width="7.5in">
<xsl:attribute name="src">
<xsl:value-of select="$watermarkPath" />
</xsl:attribute>
</fo:external-graphic>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block-container>
</xsl:for-each>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:2)
不确定它是否适用于FOP,但如果它是页面的完整尺寸图像......
<fo:layout-master-set>
<fo:simple-page-master master-name="my-page"
page-height="11in" page-width="8.5in" margin="0.5in">
<fo:region-body />
<fo:region-before extent="11in" region-name="myheader" background-image="{path-to-my-image}"/>
</fo:simple-page-master>
</fo:layout-master-set>
如果没有,则将绝对定位的块容器放在区域“myheader”的实际静态内容中,不要使用上面的背景图像。
<fo:page-sequence master-reference="my-page">
<fo:static-content flow-name="myheader">
<fo:block-container position="absolute" top="XX" left="XX">
<fo:block>
<fo:external-graphic .../>
</fo:block>
</fo:block-container>
</fo:static-content>
如果你真的想要一个叠加层(意思是覆盖所有内容的顶部),那么将它放在区域之后而不是之前。
答案 1 :(得分:-1)
我将背景图片放在region-body中:
fo:region-body background-image="{$Url}"/