Apache FOP - XSL FO - 计算故意留空页

时间:2015-04-27 05:08:14

标签: xsl-fo apache-fop

我的XSL

<fo:layout-master-set>
        <fo:simple-page-master master-name="normal" page-height="210mm" page-width="148mm"> 
            <fo:region-body region-name="xsl-region-body" margin="28mm 2mm 10mm 8mm" />
            <fo:region-before region-name="xsl-region-before"/>
            <fo:region-after region-name="xsl-region-after" extent="12mm"/>
        </fo:simple-page-master>
        <fo:simple-page-master master-name="blank" page-height="210mm" page-width="148mm">
            <fo:region-body/>
            <fo:region-before region-name="header-blank" extent="210mm"/>
            <fo:region-after region-name="xsl-region-after" extent="12mm"/>
        </fo:simple-page-master>
        <fo:page-sequence-master master-name="document">
            <fo:repeatable-page-master-alternatives>
                <fo:conditional-page-master-reference blank-or-not-blank="not-blank" master-reference="normal"/>
                <fo:conditional-page-master-reference blank-or-not-blank="blank" master-reference="blank"/>
            </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>
</fo:layout-master-set>

<fo:page-sequence master-reference="document" force-page-count="end-on-even">   
    <fo:static-content flow-name="xsl-region-before">
        <fo:block font-weight="normal" font-family="Helvetica" text-align="center" margin="6mm 2mm 0mm 8mm">
        </fo:block>
    </fo:static-content>

    <fo:static-content flow-name="xsl-region-after">
        <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica" margin="0mm 2mm 0mm 8mm">
            P <fo:page-number/>/<fo:page-number-citation ref-id="TheVeryLastPage"/>
        </fo:block>
    </fo:static-content>

    <fo:static-content flow-name="header-blank">
        <fo:block text-align-last="center" font-size="9.5" margin-top="75mm">
            Intentionally left blank
        </fo:block>
    </fo:static-content>

    <fo:flow flow-name="xsl-region-body">
        <fo:block id="TheVeryLastPage"> </fo:block>
    </fo:flow>

</fo:page-sequence>

输出: 第一页:P 1/1 第二页:P 2/1

所需的输出: 第一页:P 1/2 第二页:P 2/2

如何在页数中包含有意留下的空白页?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

它不能以这种方式工作,因为带有ID TheVeryLastPage的块不会出现在自动生成的最后一页中。只有在不需要生成额外的空白页(故意留空)时,才会生成正确的编号。

Apache FOP,有时且不幸的是有关页码检索的错误或限制(特别是,如果您使用可能对您的案例有帮助的<fo:page-number-citation-last ref-id="">,例如通过在<fo:block>上设置ID用于显示页面编号,它应该正常工作 - 它实际上与商业渲染器,如Antenna House,因为它能够执行2遍生成过程。)

唯一的方法是使用FOP,如下所示:

  1. <fo:page-sequence>
  2. 上设置ID
  3. 使用<fo:page-number-citation-last>
  4. 您修改后的代码如下所示:

    <fo:page-sequence master-reference="document" force-page-count="end-on-even" id="TheVeryLastPage">   
        <fo:static-content flow-name="xsl-region-before">
            <fo:block font-weight="normal" font-family="Helvetica" text-align="center" margin="6mm 2mm 0mm 8mm">
            </fo:block>
        </fo:static-content>
    
        <fo:static-content flow-name="xsl-region-after">
            <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica" margin="0mm 2mm 0mm 8mm">
                P <fo:page-number/>/<fo:page-number-citation-last ref-id="TheVeryLastPage" />
            </fo:block>
        </fo:static-content>
    
        <fo:static-content flow-name="header-blank">
            <fo:block text-align-last="center" font-size="9.5" margin-top="75mm">
                Intentionally left blank
                <!--fo:block id="TheVeryLastPage" /-->
            </fo:block>
        </fo:static-content>
    
        <fo:flow flow-name="xsl-region-body">
             <fo:block>Thy hand, belinda, darkness shades me.</fo:block>
             <fo:block>On thy bosom let me rest.</fo:block>
             <fo:block>More I would, but death invades me.</fo:block>
             <fo:block>Death is now a welcome guest.</fo:block>
    
             <fo:block>When I am laid in earth, may my wrongs create</fo:block>
             <fo:block>No trouble in thy breast.</fo:block>
             <fo:block>Remember me, but ah! forget my fate.</fo:block>
        </fo:flow>
    </fo:page-sequence>