2013-06-19 257 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}"/