簡體   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