如何停止计算空白页XSLT / XSLFO

时间:2016-01-12 06:33:52

标签: xml xslt apache-fop

我的布局从第1页开始并继续。现在的问题是它也计算空白页面。有没有办法强制停止空白页计数。

当前输出

第1页(非空白) - 第1页,共6页

第2页(空白)

第3页(非空白) - 第3页,共6页

第4页(空白)

第5页(非空白) - 第5页,共6页

第6页(空白)

预期输出:

第1页(非空白) - 第1页,共3页

第2页(空白)

第3页(非空白) - 第2页,共3页

第4页(空白)

第5页(非空白) - 第3页,共3页

第6页(空白)

代码

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" >
<xsl:template match="/">
    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
            <fo:simple-page-master margin-left="0.5in" margin-top="0.5in" margin-right="0.5in" margin-bottom="0.5in" page-height="11in" page-width="8.5in" master-name="PageFront">
                <fo:region-body region-name="letterPageBody" margin-left="0pt" margin-top="3.5in" margin-right="0pt" margin-bottom="1in" />
                <fo:region-before extent="4in" region-name="FirstPageHeader" precedence="true" />
                <fo:region-after extent="0.8in" region-name="letterPageFooter" precedence="true" background-color="yellow" />
            </fo:simple-page-master>
            <fo:simple-page-master margin-left="0.5in" margin-top="0.5in" margin-right="0.5in" margin-bottom="0.5in" page-height="11in" page-width="8.5in" xmlns:fo="http://www.w3.org/1999/XSL/Format" master-name="Blank">
                <fo:region-body margin-left="0pt" margin-top="3.5in" margin-right="0pt" margin-bottom="1in" region-name="letterPageBody2" />
            </fo:simple-page-master>
            <fo:page-sequence-master master-name="LetterPages">
                <fo:repeatable-page-master-alternatives>
                    <fo:conditional-page-master-reference master-reference="PageFront" page-position="first" odd-or-even="odd" />
                    <fo:conditional-page-master-reference master-reference="Blank" odd-or-even="even" />
                    <fo:conditional-page-master-reference master-reference="PageFront" odd-or-even="odd" />
                </fo:repeatable-page-master-alternatives>
            </fo:page-sequence-master>
        </fo:layout-master-set>
        <fo:page-sequence force-page-count="auto" initial-page-number="auto" master-reference="LetterPages">
            <fo:static-content flow-name="letterPageFooter">
                <fo:block>
                    <xsl:apply-templates select="//region[@name='Footer']" />
                </fo:block>
            </fo:static-content>
            <fo:static-content flow-name="FirstPageHeader">
                <fo:table width="100%" table-layout="fixed">
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block background-color="#67D217">
                                    <xsl:apply-templates select="//region[@name='address']" />
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:block text-align="center">Page <fo:page-number /> of <fo:page-number-citation ref-id="LastPage" /></fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-body>
                </fo:table>
            </fo:static-content>
            <fo:flow flow-name="letterPageBody">
                <fo:block background-color="#F1F1F1">
                    <xsl:apply-templates select="//region[@name='Body']" />
                </fo:block>
                <fo:block id="LastPage" />
            </fo:flow>
        </fo:page-sequence>
    </fo:root>

 </xsl:template>

</xsl:stylesheet>

以上的输出是(假设有两页要显示)

第一页(非空白)第1页,共3页

第二页(空白)

第三页(非空白)第3页,共3页

  

修改

这是使用上述xsl的文档(这是一个基于Apache-FOP编写的自定义工具)

<?xml version="1.0" encoding="utf-8"?>

<docdef version="5.1"  numbering-format="1">
<scriptlinks />
<script language="JavaScript" />
<interview-data />
<template-edition channel="2" template="">
    <edition-content>
        <sectionmap section="Body" region="Body" />
        <sectionmap section="Footer" region="Footer" />
        <sectionmap section="Header" region="address" />
    </edition-content>
</template-edition>
<section id="" name="Document">
    <section id="" name="Body">
        <frag id="" name="new text fragment" no-match="error" type="text">
            <edition id="" name="new text fragment" withdrawn="False">
                <edition-content>
                    <p xml:space="preserve">hen it is 5°F outside?</p>
                    <p xml:space="preserve">Wearing a cape during combat?</p>
                    <p xml:space="preserve">What's between the finite and the infinite?</p>
                    <p xml:space="preserve">What was C-3PO talking about when he said, “That’s funny, the damage doesn’t look as bad from out here.”</p>
                    <p xml:space="preserve">Intersperse lines from two files</p>
                    <p xml:space="preserve">How to find an employer who is NOT child friendly?</p>
                    <p xml:space="preserve">Why does Binary exist?</p>
                    <p xml:space="preserve">How many layers are too many layers in ArcMap?</p>
                    <p xml:space="preserve">Quinean Regex Tester</p>
                    <p xml:space="preserve">Is it safe to post one's research on web sites like Math Overflow for "peer review" before submitting to a journal?</p>
                    <p xml:space="preserve">Does a mourner tear one garment, or every garment he wears for a period of time?</p>
                    <p xml:space="preserve">Particle between city and prefecture?</p>
                    <p xml:space="preserve">Surrounded Countries</p>
                    <p xml:space="preserve">Why would security cover things like natural disasters?</p>
                    <p xml:space="preserve">How do exit interviews benefit the company?</p>
                    <p xml:space="preserve">Mystery 1970's Sci Fi Novel titled "Planet of the Gworfs" (or perhaps planet of the "Gwarfs")</p>
                    <p xml:space="preserve">Getting a US minor passport when you can't find one parent</p>
                    <p xml:space="preserve">Open source software capable of open Sketch files</p>
                    <p xml:space="preserve">Is it possible to spread holy water on a weapon like you do with poison?</p>
                    <p xml:space="preserve">more hot questions</p>
                    <p xml:space="preserve">question feed</p>
                    <p xml:space="preserve">tour help blog chat data legal privacy policy work here advertising info mobile contact us feedback</p>
                    <p xml:space="preserve">TECHNOLOGY    LIFE / ARTS    CULTURE / RECREATION    SCIENCE    OTHER</p>
                    <p xml:space="preserve">Stack Overflow</p>
                    <p xml:space="preserve">Server Fault</p>
                    <p xml:space="preserve">Super User</p>
                    <p xml:space="preserve">Web Applications</p>
                    <p xml:space="preserve">Ask Ubuntu</p>
                    <p xml:space="preserve">Webmasters</p>
                </edition-content>
            </edition>
        </frag>
    </section>
    <section id="" name="Header">
        <frag id="" name="new text fragment" no-match="error" type="text">
            <edition id="" name="new text fragment" withdrawn="False">
                <edition-content>
                    <p xml:space="preserve">Page <page-numbering value="current.page" /> of <page-numbering value="total.pages" /></p>
                </edition-content>
            </edition>
        </frag>
    </section>
    <section id="" name="Footer">
        <frag id="" name="new text fragment" no-match="error" type="text">
            <edition id="" name="new text fragment" withdrawn="False">
                <edition-content>
                    <p xml:space="preserve">Type your text here...</p>
                </edition-content>
            </edition>
        </frag>
    </section>
</section>

在上面

<template-edition channel="2" template="">
<edition-content>
    <sectionmap section="Body" region="Body" />
    <sectionmap section="Footer" region="Footer" />
    <sectionmap section="Header" region="address" />
</edition-content>

示例: 'Header'映射到XSL区域'address'(对其他人来说相同)

1 个答案:

答案 0 :(得分:2)

如果所有网页都来自单个fo:page-sequence,则没有直接方式来实现所需的输出。

XSL recommendation中,fo:page-number的值被定义为页面的作品集编号特征,根据这些规则计算:

  
      
  1. fo:page-sequence返回的第一页上的作品集编号特征的值被限制为等于initial-page-number特征的值。
  2.   
  3. 后续页面上的作品集编号特征的值被限制为比前一页面上的值大1。
  4.   

换句话说,您可以决定从page-sequence派生的第一页的初始编号,但连续页面会获得连续的页码(无论它们是否显示在页面中或不是)。

这是一般答案;在您的特定情况下,可以使用间接方式获得您想要的内容:

  • 可以将您的内容分成不同的page-sequence,以便每个内容生成一个完整页面和一个空白页面(设置force-page-count="even"并在第二个initial-page-number="2"上使用page-sequence 1}},等等......)
  • 采用两步法,你可以使用FOP的intermediate format feature

    1. 创建没有空白页面的outpt,带有所需的页码
    2. 在编号之间插入空白页

(披露:我是FOP开发人员,但近年来不是很活跃)