检索不同页面上的标记(第一页、最后一页和中间页)

Retrieve markers on different pages (first, last, and intermediate)

我的 XSL 代码:

            <fo:layout-master-set>

                <fo:simple-page-master master-name="page-even" page-height="210mm" page-width="148mm"> 
                    <fo:region-body region-name="xsl-region-body" margin="28mm 8mm 10mm 2mm" />
                    <fo:region-before region-name="xsl-region-before-even"/>
                    <fo:region-after region-name="xsl-region-after-even" extent="12mm"/>
                </fo:simple-page-master>

                <fo:simple-page-master master-name="page-odd" 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-odd"/>
                    <fo:region-after region-name="xsl-region-after-odd" extent="12mm"/>
                </fo:simple-page-master>

                 <fo:simple-page-master master-name="last-page-even" 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-even" extent="12mm"/>
                </fo:simple-page-master>

                <fo:page-sequence-master master-name="document">
                    <fo:repeatable-page-master-alternatives>
                        <fo:conditional-page-master-reference odd-or-even="odd" master-reference="page-odd" blank-or-not-blank="not-blank"/>
                        <fo:conditional-page-master-reference odd-or-even="even" master-reference="page-even" blank-or-not-blank="not-blank"/>
                        <fo:conditional-page-master-reference blank-or-not-blank="blank" odd-or-even="even" master-reference="last-page-even"/>
                    </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" id="TheVeryLastPage">

                    <!--Headers-->
                    <fo:static-content flow-name="xsl-region-before-odd">
                        <fo:block font-weight="normal" font-family="Helvetica" text-align="center" margin="6mm 2mm 0mm 8mm">

                       </fo:block>
                       <fo:retrieve-marker retrieve-class-name="amarker"/>
                    </fo:static-content>

                    <fo:static-content flow-name="xsl-region-before-even">
                        <fo:block font-weight="normal" font-family="Helvetica" text-align="center" margin="6mm 8mm 0mm 2mm">

                       </fo:block>
                       <fo:retrieve-marker retrieve-class-name="amarker"/>
                    </fo:static-content>

                    <fo:static-content flow-name="header-blank">
                        <fo:block font-weight="normal" font-family="Helvetica" text-align="center" margin="6mm 8mm 0mm 2mm">

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

                    <!--Footers-->
                    <fo:static-content flow-name="xsl-region-after-odd">
                        <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica" margin="0mm 2mm 0mm 8mm">

                        </fo:block>
                        <fo:retrieve-marker retrieve-class-name="amarker"/>
                    </fo:static-content>

                    <fo:static-content flow-name="xsl-region-after-even">
                        <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica" margin="0mm 8mm 0mm 2mm">

                        </fo:block>
                        <fo:retrieve-marker retrieve-class-name="amarker"/>
                    </fo:static-content>

                    <!--Body-->
                    <fo:flow flow-name="xsl-region-body">
                        <fo:block-container font-size="9.5pt" font-weight="normal" font-family="Helvetica">
                            <fo:block>
                                <fo:marker marker-class-name="amarker">
                                    <fo:block>xxx</fo:block>
                                </fo:marker>
                            </fo:block>

                        </fo:block-container>
                    </fo:flow>

我试图在页脚中断时在页脚上放置“在下一页继续”标签(但在下一页是故意留空) 和“接上一页”标签每当上一页中断时(但当页面有意留空时则不会)。

我尝试了很多东西,但似乎没有什么能给我想要的输出。

我正在使用 Apache Fop。

如有任何帮助,我们将不胜感激。

没那么容易...

这是一个适用于 FOP 的解决方案(我发现另一个适用于 Antenna House 但不适用于 Apache FOP 的解决方案):

还需要为您的特意留空设置一个特定的页脚;我在代码中写下了一些注释;如果您还有其他问题,请不要犹豫。

请注意:

  1. 请注意添加 <fo:marker> 的位置;它们需要作为 <fo:block> 的第一个 child(ren) 插入。
  2. 第一个块要输出有特殊处理

<fo:layout-master-set>

    <fo:simple-page-master master-name="page-even" page-height="210mm" page-width="148mm">
        <fo:region-body region-name="xsl-region-body" margin="28mm 8mm 10mm 2mm"/>
        <fo:region-before region-name="xsl-region-before-even" extent="12mm"/>
        <fo:region-after region-name="xsl-region-after-even" extent="12mm"/>
    </fo:simple-page-master>

    <fo:simple-page-master master-name="page-odd" 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-odd" extent="12mm"/>
        <fo:region-after region-name="xsl-region-after-odd" extent="12mm"/>
    </fo:simple-page-master>

    <fo:simple-page-master master-name="last-page-even" page-height="210mm" page-width="148mm">
        <fo:region-body/>
        <fo:region-before region-name="header-blank" extent="210mm"/>
        <!-- created a specific footer for the conditionally inserted page -->
        <fo:region-after region-name="footer-blank" extent="12mm"/>
    </fo:simple-page-master>

    <fo:page-sequence-master master-name="document">
        <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference odd-or-even="odd" master-reference="page-odd"
                blank-or-not-blank="not-blank"/>
            <fo:conditional-page-master-reference odd-or-even="even"
                master-reference="page-even" blank-or-not-blank="not-blank"/>
            <fo:conditional-page-master-reference blank-or-not-blank="blank" odd-or-even="even"
                master-reference="last-page-even"/>
        </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" id="TheVeryLastPage">
        <!-- Headers -->
    <fo:static-content flow-name="xsl-region-before-odd">
        <fo:block font-weight="normal" font-family="Helvetica" text-align="center"
            margin="6mm 2mm 0mm 8mm"> </fo:block>
        <fo:retrieve-marker retrieve-class-name="continued"
            retrieve-position="first-starting-within-page" retrieve-boundary="page-sequence"/>
    </fo:static-content>

    <fo:static-content flow-name="xsl-region-before-even">
        <fo:block font-weight="normal" font-family="Helvetica" text-align="center"
            margin="6mm 8mm 0mm 2mm"> header even </fo:block>
        <fo:retrieve-marker retrieve-class-name="continued"
            retrieve-position="first-starting-within-page" retrieve-boundary="page-sequence"/>
    </fo:static-content>

    <fo:static-content flow-name="header-blank">
        <fo:block font-weight="normal" font-family="Helvetica" text-align="center"
            margin="6mm 8mm 0mm 2mm"> </fo:block>
        <fo:block text-align-last="center" font-size="18" font-weight="bold">Intentionally left
            blank
        </fo:block>
    </fo:static-content>

    <!--Footers-->
    <fo:static-content flow-name="xsl-region-after-odd">
        <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica"
            margin="0mm 2mm 0mm 8mm"> </fo:block>
        <fo:retrieve-marker retrieve-class-name="tobefollowed"
            retrieve-position="last-ending-within-page" retrieve-boundary="page-sequence"/>
    </fo:static-content>

    <fo:static-content flow-name="xsl-region-after-even">
        <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica"
            margin="0mm 8mm 0mm 2mm"> </fo:block>
        <fo:retrieve-marker retrieve-class-name="tobefollowed"
            retrieve-position="last-ending-within-page" retrieve-boundary="page-sequence"/>
    </fo:static-content>

    <fo:static-content flow-name="footer-blank">
        <fo:block font-size="9pt" font-weight="normal" font-family="Helvetica"
            margin="0mm 8mm 0mm 2mm"> </fo:block>
    </fo:static-content>

    <!--Body-->
    <fo:flow flow-name="xsl-region-body" font-size="9.5pt" font-weight="normal"
        font-family="Helvetica">


        <fo:block>
            <!-- set up the first marker as empty, in order to have nothing of the first page -->
            <fo:marker marker-class-name="continued"><fo:block><!-- No text --></fo:block></fo:marker>
            <!-- Prepare to insert "to be continued" -->
            <fo:marker marker-class-name="tobefollowed">
                <fo:block>Continued on the following page</fo:block>
            </fo:marker>
        </fo:block>
        <!-- !!!! FIRST BLOCK !!!! -->
        <fo:block>
            <!-- the other pages may have "continued" mentined in the header --> 
            <fo:marker marker-class-name="continued"><fo:block>Continued from the previous page</fo:block></fo:marker>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla suscipit sem
            ut sollicitudin imperdiet. Donec pulvinar arcu quis diam scelerisque vestibulum.
            Curabitur et rhoncus ipsum, at molestie tellus. Vestibulum ante ipsum primis in
            faucibus orci luctus et ultrices posuere cubilia Curae; Integer vitae faucibus dui.
            Nullam laoreet felis a tristique varius. Proin urna tellus, dignissim ut laoreet
            eget, rhoncus non diam. In nisl nibh, ultricies malesuada nibh eu, imperdiet
            fermentum tortor. Donec id aliquam ante, ut posuere sapien. Vivamus et gravida
            velit, quis dictum libero. Suspendisse porttitor, risus quis luctus malesuada, elit
            felis sollicitudin ante, eu vestibulum justo lectus nec metus. Vestibulum nec
            bibendum dui, accumsan ultrices turpis. </fo:block>

            <!-- ... output all your text here ... -->
        <fo:block>
            <!-- This one is empty so that the end is not without any text -->
            <fo:marker marker-class-name="tobefollowed"><fo:block><!-- No text --></fo:block></fo:marker>
            <!-- And this one is to know that text may cut up onto different pages -->
            <fo:marker marker-class-name="continued"><fo:block>Continued from the previous page</fo:block></fo:marker>

        </fo:block>
    </fo:flow>
</fo:page-sequence>