2013-06-19 220 views
0

我正在使用ApacheFOP创建一个PDF,其中包含多页内容和每个页面上的水印(半透明)。我在使用XSLFO时遇到了很多困难,并使用列表功能获得了一个概念验证 - 但我想有一个更简单的方法。更熟悉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> 

回答

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

我把我的背景图像中的区域体:

fo:region-body background-image="{$Url}"/