Xml XSL-FO文档中的页码
在我的项目中,XSL-FO用于动态创建PDF。文档是从网格/表格中选择的,我无法预测它的数量。所有文档都打印为一个PDF。我需要为每个子文档添加页码,即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
- 第一个子文件:1/2、2/2
- 第二个子文件:1/3、2/3、3/3
- 第3子文件:1/1
<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的示例。谢谢