[英]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.