Xml XSL-FO文档中的页码

Xml XSL-FO文档中的页码,xml,pdf,xslt,xsl-fo,Xml,Pdf,Xslt,Xsl Fo,在我的项目中,XSL-FO用于动态创建PDF。文档是从网格/表格中选择的,我无法预测它的数量。所有文档都打印为一个PDF。我需要为每个子文档添加页码,即 第一个子文件:1/2、2/2 第二个子文件:1/3、2/3、3/3 第3子文件:1/1 我的主PDF文档的代码,它按一个序列生成页码 <xsl:import href="DocumentsUtils.DocumentsTemplates.DetailedProductionOrderTemplate.xsd"/> <xs

在我的项目中,XSL-FO用于动态创建PDF。文档是从网格/表格中选择的,我无法预测它的数量。所有文档都打印为一个PDF。我需要为每个子文档添加页码,即

  • 第一个子文件:1/2、2/2
  • 第二个子文件:1/3、2/3、3/3
  • 第3子文件:1/1
我的主PDF文档的代码,它按一个序列生成页码

<xsl:import href="DocumentsUtils.DocumentsTemplates.DetailedProductionOrderTemplate.xsd"/>
<xsl:template match="/t:ArrayOfDeliveryDocumentModel">

<fo:page-sequence master-reference="simple" force-page-count="no-force">
    <fo:static-content flow-name="xsl-region-after" font-family="{$font}" font-size="9pt">
      <fo:block text-align="center">
        Page <fo:page-number/>
      </fo:block>
    </fo:static-content>
    <fo:flow page-sequence="xsl-region-body" font-family="{$font}" font-size="9pt">
      <xsl:apply-templates/>
        <fo:block id="last-page"/>
    </fo:flow>
  </fo:page-sequence>
子文档模板

<xsl:template match="t:DeliveryDocumentModel">
<fo:block text-align="center" font-family="{$font}" break-before="page">
  <fo:table border-collapse="collapse" table-layout="fixed">
    <fo:table-column column-width="9.5cm" column-number="1"/>
    <fo:table-column column-width="9.5cm" column-number="2"/>
    <fo:table-body>
      <fo:table-row height="1cm" display-align="center">
        <fo:table-cell text-align="right" border-style="none" padding="0.5pt">
          <fo:block text-align="right" margin-right="1cm" font-weight="bold" font-size="11pt">
            <xsl:value-of select="t:DocumentNoHeader" /> : <xsl:value-of select="t:DocumentNo" />
          </fo:block>
        </fo:table-cell>
        <fo:table-cell text-align="left" border-style="none" padding="0.5pt">
          <fo:block text-align="left">
            <xsl:value-of select="t:DeliveryDateHeader" /> : <xsl:value-of select="extensions:FormatDateTime(t:DeliveryDate)" />
          </fo:block>
        </fo:table-cell>
      </fo:table-row>
    </fo:table-body>
.....

: 
: 
.....
如果可能的话,您能帮助我在标题中显示模板中的值,即每个子文档的订单Id吗? -第一个子文档:订单Id:1234 -第二个子文档:订单Id:1235 -第三个子文档:订单Id:1236
-..

对于页码,为每个
t:DeliveryDocumentModel
分别创建一个
fo:page sequence
,并使用
initial page number=“1”
重新启动每个页码序列的页码。看

您可以使用
fo:page number citation last
获取从
fo:page sequence
生成的页面中最后一页的页码

通过为每个
t:DeliveryDocumentModel
创建单独的
fo:page sequence
,您还可以将订单号放入
fo:page sequence
fo:static content


或者,您可以为每个
t:DeliveryDocumentModel
fo:flow
FOs中添加
fo:marker
,并在
fo:static content
中使用
fo:retrieve marker
)。您应该能够从

的“拇指索引(标记,检索标记)”示例中推断出所需内容。我没有做测试,我只是原地编码,因为您没有发布任何XML。您应该将页面序列生成移动到t:DeliveryDocumentModel模板中,如下所示(带注释),以了解每个部分的作用:

<xsl:template match="t:DeliveryDocumentModel">
<!-- create a varible unique to each document, use the count -->
<xsl:variable name="docnum" select="concat('doc_',count(preceding-sibling:t:DeliveryDocumentModel))"/>
<!-- set the initial page number to "1" -->
<fo:page-sequence master-reference="simple" force-page-count="no-force" initial-page-number="1">
    <fo:static-content flow-name="xsl-region-after" font-family="{$font}" font-size="9pt">
        <!-- reference the unique number for the last page it is on -->
        <fo:block text-align="center"> Page <fo:page-number/> of <fo:page-number-citation-last ref-id="{$docnum}"/>
        </fo:block>
    </fo:static-content>
    <!-- put the id on the flow, so the end of the flow will be on the last page of each page sequence -->
    <fo:flow page-sequence="xsl-region-body" font-family="{$font}" font-size="9pt" id="{$docnum}">
        <fo:block text-align="center" font-family="{$font}">
...

第页,共页
...

实际上,您在每个流上放置了一个唯一的id,并且每个流都位于每个文档的页面序列中。您现在可以通过最后一页的页码引用来获得流的最后一页页码。您还可以将每个页面序列重置为从“1”开始。你应该得到三分之一。。。第1页,共2页。。。第1页,共16页。。。哦,您可以删除该块上的break before=“page”,因为页面序列正在为您执行此操作。

我不太理解您的问题。是否要添加文档的总页数?PS:请提供一个输入XML的示例。谢谢