2013-06-19 15 views
0

Я использую ApacheFOP для создания pdf, который содержит несколько страниц контента и водяной знак (полупрозрачный) на каждой странице. Я очень сильно борюсь с XSLFO и получил доказательство концепции, использующей функциональность списка, однако, я думаю, что есть более простой способ. Может ли кто-нибудь более знакомый с xslfo предоставить более простое решение? Ниже мой код:XSLFO overlay image

<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

Не уверен, что он работает с ФОП, но если это был полный размер страницы ...

<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> 

Если нет, то поставил абсолютный позиционированием block-container внутри фактического статического содержимого для области «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}"/