1

私は xsl 変換を行っており、複数の異なるドキュメントを同じ pdf に入れたいと考えています。最初のページ、最後のページ、およびその他のページの単純なページ マスターがあります。最後のページと最初のページを使用して新しいドキュメントを開始し、ページ番号をリセットする方法を見つける必要があります。

<fo:layout-master-set>
  <fo:simple-page-master master-name="first-page">
    <fo:region-body margin-bottom="1in" region-name="main-body"/>
    <fo:region-after extent="1in" region-name="page-footer" display-align="after"/>
  </fo:simple-page-master>
  <fo:simple-page-master master-name="other-pages">
    <fo:region-body margin-top=".5in" margin-bottom=".5in" region-name="main-body"/>
    <fo:region-before extent=".5in" region-name="page-header" display-align="before"/>
    <fo:region-after extent=".5in" region-name="page-footer" display-align="after"/>
  </fo:simple-page-master>
  <fo:simple-page-master master-name="last-page">
    <fo:region-body margin-top=".5in" margin-bottom="1in" region-name="main-body"/>
    <fo:region-before extent=".5in" region-name="page-header" display-align="before"/>
    <fo:region-after extent="1in" region-name="page-footer" display-align="after"/>
  </fo:simple-page-master>
  <fo:page-sequence-master master-name="my-sequence">
    <fo:repeatable-page-master-alternatives>
      <fo:conditional-page-master-reference page-position="first"
                                            master-reference="first-page"/>
      <fo:conditional-page-master-reference page-position="last"
                                            master-reference="last-page"/>
      <fo:conditional-page-master-reference odd-or-even="rest"
                                            master-reference="other-pages"/>
    </fo:repeatable-page-master-alternatives>
  </fo:page-sequence-master>
</fo:layout-master-set>

initial-page-number を設定しようとしましたが、ページ内で設定できません。何か案は?

これがページシーケンスです。

<fo:page-sequence master-reference="my-sequence">
  <fo:static-content flow-name="page-header" font-style="italic">
    <xsl:if test="/Report[string-length(@print-page-headers) = 0 or @print-page-headers != 'false']">
      <fo:block>
        <fo:table width="100%" table-layout="fixed">
          <fo:table-column/>
          <fo:table-column/>
          <fo:table-body>
            <fo:table-row line-height="12pt" font-size="10pt">
              <fo:table-cell>
                <fo:block text-align="left">
                  <xsl:value-of select="/Report/ReportInfo/title "/>
                </fo:block>
              </fo:table-cell>
              <fo:table-cell line-height="12pt" font-size="10pt">
                <fo:block text-align="right">
                  Page <fo:page-number/> of <fo:page-number-citation ref-id="terminator"/>
                </fo:block>
              </fo:table-cell>
            </fo:table-row>
          </fo:table-body>
        </fo:table>
      </fo:block>
      <fo:block>
        <fo:leader leader-pattern="rule" rule-thickness="1pt" leader-length="100%"/>
      </fo:block>
    </xsl:if>
  </fo:static-content>
  <fo:static-content flow-name="page-footer">
    <xsl:if test="/Report[string-length(@print-page-footers) = 0 or @print-page-footers != 'false']">
      <fo:block >
        <fo:table width="100%" table-layout="fixed">
          <fo:table-column/>
          <fo:table-body>
            <fo:table-row height="9in">
              <fo:table-cell display-align="after">
                <fo:retrieve-marker retrieve-class-name="includes"/>
                <fo:table width="100%" table-layout="fixed">
                  <fo:table-column/>
                  <fo:table-column/>
                  <fo:table-column/>
                  <fo:table-body>
                    <fo:table-row>
                      <fo:table-cell text-align="left">
                        <fo:block font-family="serif" font-size="8pt">
                          <xsl:value-of select="/Report/reportName"/>
                        </fo:block>
                      </fo:table-cell>
                      <fo:table-cell text-align="center">
                        <fo:block font-family="serif" font-size="6pt">
                          <xsl:text></xsl:text>
                        </fo:block>
                      </fo:table-cell>
                      <fo:table-cell text-align="right">
                        <fo:block font-family="serif" font-size="8pt">
                          <xsl:value-of select="/Report/ReportInfo/date"/>
                        </fo:block>
                      </fo:table-cell>
                    </fo:table-row>
                    <fo:table-row>
                      <fo:table-cell number-columns-spanned="3" text-align="center">
                        <fo:block font-family="serif" font-size="6pt">
                          <xsl:text></xsl:text>
                        </fo:block>
                      </fo:table-cell>
                    </fo:table-row>
                  </fo:table-body>
                </fo:table>
              </fo:table-cell>
            </fo:table-row>
          </fo:table-body>
        </fo:table>
      </fo:block>
    </xsl:if>
  </fo:static-content>
  <fo:flow flow-name="main-body">
    <fo:block hyphenate="true" language="en">
      <xsl:apply-templates/>
    </fo:block>
    <fo:block id="terminator"/>
  </fo:flow>
</fo:page-sequence>

テンプレートを使用して最初のページ番号をリセットしてみました:

<xsl:template match="newreport">
  <fo:page-sequence initial-page-number="1" master-reference="my-sequence">
    <fo:static-content flow-name="page-header" font-style="italic">
      <fo:block break-before="page"/>
      <fo:block>
        <fo:table width="100%" table-layout="fixed">
          <fo:table-column/>
          <fo:table-column/>
          <fo:table-body>
            <fo:table-row line-height="12pt" font-size="10pt">
              <fo:table-cell>
                <fo:block text-align="left">
                  <xsl:value-of select="/Report/ReportInfo/title "/>
                </fo:block>
              </fo:table-cell>
              <fo:table-cell line-height="12pt" font-size="10pt">
                <fo:block text-align="right">
                  Page <fo:page-number/> of <fo:page-number-citation ref-id="terminator"/>
                </fo:block>
              </fo:table-cell>
            </fo:table-row>
          </fo:table-body>
        </fo:table>
      </fo:block>
      <fo:block>
        <fo:leader leader-pattern="rule" rule-thickness="1pt" leader-length="100%"/>
      </fo:block>
    </fo:static-content>
  </fo:page-sequence>
</xsl:template>

これはうまくいきません。最初のページ シーケンスからコードをコピーしました。最初のページにリセットしてページヘッダーなどを実行できるようにしたい.

4

1 に答える 1

1

おそらく、このサンプルを自分の環境に適応させたいと思うでしょう。これは、複数のバッチ ドキュメント内のページ X/Y の参照に対して完全にうまく機能します。ここで重要なことの 1 つは、ドキュメント「チャンク」への一意の参照を使用する必要があることです。XML で一意のものを使用しますが、繰り返すドキュメントで generate-id(.) を使用して、その id を fo:flow に追加し、次に fo:page-number-citation-last を使用するのも同じくらい簡単だと思います。そのID。したがって、各フローの最後のページを取得します。

サンプル入力:

    <batch>
        <document>
            <page/>
            <page/>
            <page/>
            <page/>
            <page/>
        </document>
        <document>
            <page/>
            <page/>
            <page/>
        </document>
        <document>
            <page/>
            <page/>
            <page/>
        </document>
    </batch>

サンプル XSL:

    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <xsl:output method="xml" indent="yes"/>
        <xsl:template match="/">
            <fo:root>
                <fo:layout-master-set>
                    <fo:simple-page-master master-name="pages">
                        <fo:region-body margin-top="1in"/>
                        <fo:region-before extent="0.5in"/>
                    </fo:simple-page-master>
                </fo:layout-master-set>
                <xsl:apply-templates/>
            </fo:root>
        </xsl:template>
        <xsl:template match="document">
                <fo:page-sequence master-reference="pages" initial-page-number="1" force-page-count="no-force">
                    <fo:static-content flow-name="xsl-region-before">
                        <fo:block>
                            Page <fo:page-number/> of <fo:page-number-citation-last ref-id="{generate-id(.)}"/>
                        </fo:block>
                    </fo:static-content>
                    <fo:flow flow-name="xsl-region-body" id="{generate-id(.)}">
                        <xsl:apply-templates/>
                    </fo:flow>
                </fo:page-sequence>
        </xsl:template>
       <xsl:template match="page">
           <fo:block break-before="page">
               I am a page
           </fo:block>
       </xsl:template>
    </xsl:stylesheet>

出力は、1 of 5、2 of 5、3 of 5 ... の後に 1 of 3、2 of 3 ... と表示され、完全に機能します。

于 2013-11-13T19:49:15.813 に答える