如何在使用 fop 使用 XSL:FO 从 XML 生成 pdf 时在所有页面中添加动态 header?

How to add dynamic header in all the pages while generating pdf from XML using XSL:FO using fop?

我必须生成一个动态而非静态的 header,其值来自 xml file.I 我正在使用 XSl:FO 生成 PDF使用 XML.I 想在所有页面中添加一个部分引用。

XSl 文件:

`<xsl:template match="References">
    <fo:block-container height="12cm" width="5cm" top="15mm" left="12cm" position="absolute">
        <fo:block font-size="8pt" font-family="Verdana">
            <xsl:apply-templates/>
        </fo:block>
    </fo:block-

'

XML 文件:

            <Referentces>
                <lbl>Date</lbl>
                <div>$date</div>
                <lbl>From</lbl>
                <div>$brief.owner</div>
                <div>T $brief.tel</div>
                #if($brief.fax)
                <div>F $brief.fax</div>
                #end
              </Referenties>

如何调用此块自动出现在所有页面中?

在 XSL FO 中,您不会放置 block-container 绝对定位来尝试重复 header。它只会放在它出现的页面上,而不是所有页面上。

您将 static-content 用于 xsl-region-before。所以你的 page-sequence 应该看起来像这样:

 <fo:page-sequence master-reference="page">
      <fo:static-content flow-name="xsl-region-before">
          <fo:block>This is content on every page</fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region--body">
          <!-- body content here -->
      </fo:flow>
  </fo:page-sequence>

您可以在 layout-master-set 中为相关 page-master 定义 header 和 body 区域的大小。

现在,如果 header 中的动态内容取决于您所在的 section/page,那么您可以使用 fo:marker 和 fo:retrieve 标记来提取您所在页面的内容进入 header.

有关标记以及如何使用它们将信息拉入静态区域的教程,请参阅 http://www.renderx.com/tutorial.html#Markers