XSL: force-page-count="end-on-even" 在偶数空白页上显示页码

Posted

技术标签:

【中文标题】XSL: force-page-count="end-on-even" 在偶数空白页上显示页码【英文标题】:XSL: force-page-count="end-on-even" displays page number on the even blank page 【发布时间】:2016-05-01 18:28:15 【问题描述】:

所以我有这种情况:我正在使用天线屋从 xml/xsl 生成 pdf。问题是生成的 pdf 包含多个 N 个文档,每个文档有 X 页。如果文档在奇数页结束打印,则必须在文档末尾插入空白页,以便下一个文档从新页开始。为此,我使用:force-page-count="end-on-even",但插入的空白页有一个页码,我不想显示它,因为页面上没有内容。 这是 xsl 部分:

<xsl:template match="document"> 
      <fo:page-sequence master-reference="myDoc"  initial-page-number="1" force-page-count="end-on-even" >
            <fo:static-content flow-name="xsl-region-after" font-size="8pt" font-family="Arial" >
                <fo:block>
                    <fo:block text-align="right" margin-right="10mm">
                        <fo:inline text-align="right">                                                                            
                            Page: <fo:page-number /> of <fo:page-number-citation-last ref-id="generate-id(.)"/>
                        </fo:inline>
                    </fo:block>        

                    <xsl:variable name="footervar" select=".//footertxt" /> <!-- Gets text betwen <footertxt> tags in XML file -->                   
                            <fo:block text-align="left" margin-left="15mm"> 
                                <fo:inline>
                                    <xsl:value-of select="$footervar" />
                                </fo:inline>                    
                            </fo:block> 
                </fo:block>    
            </fo:static-content>
        </fo:page-sequence>
    </xsl:template>   

xml 部分如下所示:

  <document>
    <footertxt>  </footertxt>
    <section>
      <paragraf>1</paragraf>
    </section>
  </document>
  <document>
    <footertxt>  </footertxt>
    <section>
      <paragraf>2</paragraf>
    </section>
    <pagebreak />
     <section>
      <paragraf>3</paragraf>
    </section>
  </document>

任何想法如何从空白页中删除页码? 谢谢

【问题讨论】:

【参考方案1】:

您可以设置一个包含多个fo:conditional-page-master-reference (https://www.w3.org/TR/xsl11/#fo_conditional-page-master-reference) 的fo:repeatable-page-master-alternatives (https://www.w3.org/TR/xsl11/#fo_repeatable-page-master-alternatives) 的fo:page-sequence-master (https://www.w3.org/TR/xsl11/#fo_page-sequence-master)。第一个fo:conditional-page-master-reference 可以有blank-or-not-blank="blank" 并引用没有fo:xsl-region-afterfo:simple-page-master

更简单地说,您可以执行以下操作:

<fo:simple-page-master master-name="BlankPage"
                       page-
                       page->
    <fo:region-body region-name="blank" />
</fo:simple-page-master>
...
<fo:page-sequence-master master-name="myDoc">
  <fo:repeatable-page-master-alternatives>
    <fo:conditional-page-master-reference master-reference="BlankPage"
                                          blank-or-not-blank="blank" />
    <fo:conditional-page-master-reference master-reference="OddPage"
                                          odd-or-even="odd" />
    <fo:conditional-page-master-reference master-reference="EvenPage"
                                          odd-or-even="even" />
  </fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>

【讨论】:

以上是关于XSL: force-page-count="end-on-even" 在偶数空白页上显示页码的主要内容,如果未能解决你的问题,请参考以下文章

XSL 递归调用 - xsl:functions vs xsl:template with call template

转换 XSL

xsl 转换在 .net 环境中生成 xsl 样式表

XSL:IF 内 XSL:for-each-group

XML--XSL

XSL xsl:template match =“/”