Получить маркеры на разных страницах (первая, последняя и промежуточная)

Мой 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>

Я пытаюсь поместить метку "Продолжение на следующей странице" в нижний колонтитул всякий раз, когда страница прерывается (но не тогда, когда следующая страница намеренно оставлена ​​пустой) и "< em>Продолжение с предыдущей страницы" всякий раз, когда предыдущая страница разрывается (но не когда страница намеренно оставлена ​​пустой).

Я пробовал много вещей, но ничего не дало мне желаемого результата.

Я использую Apache Fop.

Любая помощь будет оценена.


person Wolf    schedule 27.04.2015    source источник


Ответы (1)


Это не так просто...

Вот решение, которое работает с FOP (я нашел другое, которое хорошо работает с Antenna House, но не с Apache FOP):

Также было необходимо установить определенный нижний колонтитул для вашего Намеренно оставленного пустым; Я записал некоторые комментарии в коде; не стесняйтесь, если у вас есть дополнительные вопросы.

Обратите внимание:

  1. будьте осторожны, добавляя <fo:marker>s ; они должны быть вставлены как первые потомки <fo:block>s.
  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>
person potame    schedule 27.04.2015
comment
Привет, @potame, я пытаюсь использовать это решение, но я получаю сообщение «Продолжение» на следующей странице в нижнем колонтитуле 2-й страницы, даже если мой контент занимает только половину 2-й страницы, а затем следует какой-то другой несвязанный контент. Есть идеи, почему? - person Dimitris; 29.06.2017
comment
@Dimitris, вам лучше задать новый вопрос для вашей конкретной проблемы и опубликовать соответствующий код, иначе помощь не может быть оказана. - person potame; 30.06.2017