[英]Page numbers in XSL-FO document
在我的项目中,XSL-FO用于动态创建PDF。 文件是从表格/表格中选择的,我无法预测它的数量。 所有文档均打印为一个PDF。 我需要为每个子文档添加页码,即
我的主要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-sequence
的fo:static-content
中。
或者,您可以在fo:flow
为每个t:DeliveryDocumentModel
添加fo:marker
( http://www.w3.org/TR/xsl/#fo_marker ),并使用fo:retrieve-marker
( http:/ /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.