繁体   English   中英

XSL-FO文档中的页码

[英]Page numbers in XSL-FO document

在我的项目中,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-...

我没有做测试,我只是在适当的地方编码,因为您没有发布任何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,并且每个流程都在每个文档的页面顺序内。 您现在可以通过page-number-citation-last获得流程的最后一页号。 您还重置每个页面序列以“ 1”开始。 您应该得到3的1 ... 2的1 ... 16的1 ...哦,您可以删除该块上的break-before =“ page”,因为页面顺序正在为您执行此操作。

对于您的页码,为每个t:DeliveryDocumentModel分别创建一个fo:page-sequence ,并使用initial-page-number="1"重新启动每个页面序列的页码。 参见http://www.w3.org/TR/xsl/#initial-page-number

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

通过为每个t:DeliveryDocumentModel分别创建一个fo:page-sequence ,您还可以将订单号放入fo:page-sequencefo:static-content中。

或者,您可以在fo:flow为每个t:DeliveryDocumentModel添加fo:markerhttp://www.w3.org/TR/xsl/#fo_marker ),并使用fo:retrieve-markerhttp:/ /www.w3.org/TR/xsl/#fo_retrieve-marker )中的fo:static-content 您应该能够从http://www.antennahouse.com/antenna1/comprehensive-xsl-fo-tutorials-and-samples-collection/上的“缩略图索引(标记,检索标记)”示例中推断出所需的内容

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM