XSL-FO - 如何为 fo:region-body 创建静态内容 [英] XSL-FO - how to create static-content for fo:region-body

查看:18
本文介绍了XSL-FO - 如何为 fo:region-body 创建静态内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须为页眉、正文和页脚创建 fo:static-content.页眉和页脚已完成并且可以正常工作,但是我的正文有问题.fo:static-content 在我的输出 PDF 的第一页上没有任何内容.fo:flow 的内容在下一页生成.我需要解释如何为 fo:region-body 创建工作 fo:static-content.

I have to create fo:static-content for header, body and footer. Header and footer are done and it works but I have a problem with body. There is nothing on my output PDF's first page from fo:static-content. Content from fo:flow is generated on next page. I need explanation how to create working fo:static-content for fo:region-body.

下面是我的 fo:layout-master-setfo:static-contentfo:flow.

Below is my fo:layout-master-set, fo:static-content and fo:flow.

         <fo:layout-master-set>
            <!-- page master for the first page-->
            <fo:simple-page-master master-name="first-page" page-width="21cm" page-height="29.7cm">
                <fo:region-body region-name="first-page-content" margin-bottom="52mm" margin-right="10mm" margin-left="15mm" margin-top="87mm" />
                <fo:region-before region-name="first-page-header" />
                <fo:region-after region-name="first-page-footer" extent="52mm" />
            </fo:simple-page-master>
            <!--page master for all others pages-->
            <fo:simple-page-master master-name="other-page" page-width="21cm" page-height="29.7cm">
                <fo:region-body />
                <fo:region-before region-name="other-page-header" />
                <fo:region-after region-name="other-page-footer" />
            </fo:simple-page-master>
            <!--page master for last page-->
            <fo:simple-page-master master-name="last-page" page-width="21cm" page-height="29.7cm">
                <fo:region-body />
                <fo:region-before region-name="last-page-header" />
                <fo:region-after extent="52mm" region-name="last-page-footer" />
            </fo:simple-page-master>
            <fo:page-sequence-master master-name="pages">
                <fo:single-page-master-reference page-position="first" master-reference="first-page" />
                <fo:repeatable-page-master-alternatives>
                    <fo:conditional-page-master-reference page-position="rest" master-reference="other-page" />
                    <fo:conditional-page-master-reference page-position="last" master-reference="last-page" />
                </fo:repeatable-page-master-alternatives>
            </fo:page-sequence-master>
        </fo:layout-master-set>


        <fo:page-sequence master-reference="pages" font-family="Arial">
            <fo:static-content flow-name="first-page-content">
                <fo:block-container>
                    <fo:block>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perferendis accusantium, culpa error totam odit blanditiis vitae facere, amet consequatur ratione laudantium velit quaerat delectus maiores ex deleniti soluta quas nostrum!</fo:block>
                </fo:block-container>
           </fo:static-content>
       </fo:page-sequence>


        <fo:flow flow-name="xsl-region-body" font-size="10">
            <fo:block-container>
                <fo:block>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur quod repellendus suscipit, quae fugit! Aliquid corrupti enim odio et rerum assumenda, veritatis, excepturi earum laborum fugit ea consequuntur explicabo eveniet!</fo:block>
            </fo:block-container>
                <fo:block id="end" />
        </fo:flow>

谢谢你的建议!

~拉德克

推荐答案

fo:page-sequence 必须有一个 fo:flow.fo:page-sequence 允许的内容来自 https://www.w3.org/TR/xsl11/#fo_page-sequence 是:

An fo:page-sequence must have an fo:flow. The allowed content for fo:page-sequence from https://www.w3.org/TR/xsl11/#fo_page-sequence is:

(title?,folio-prefix?,folio-suffix?,static-content*,flow+)

(title?,folio-prefix?,folio-suffix?,static-content*,flow+)

所以你可以有多个 fo:flow 但你必须至少有一个.

so you can have more than one fo:flow but you have to have at least one.

让您的内容工作的一种方法是在您的第一个 fo:page-sequence 中将 fo:static-content 更改为 fo:flow代码>.(您现有的 fo:flow 也需要在 fo:page-sequence 内.)

One way to get your content to work is to change fo:static-content to fo:flow in your first fo:page-sequence. (Your existing fo:flow also needs to be inside an fo:page-sequence.)

另一种方法是将所有内容放在一个 fo:page-sequence 中,并在第一页的内容之后强制中断:

Another way is to put everything in one fo:page-sequence and to force a break after the content on the first page:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
     xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions"
     xml:lang="en">
  <fo:layout-master-set>
    <!-- page master for the first page-->
    <fo:simple-page-master master-name="first-page" page-width="21cm" page-height="29.7cm">
      <fo:region-body region-name="xsl-region-body" margin-bottom="52mm" margin-right="10mm" margin-left="15mm" margin-top="87mm" />
      <fo:region-before region-name="first-page-header" />
      <fo:region-after region-name="first-page-footer" extent="52mm" />
    </fo:simple-page-master>
    <!--page master for all others pages-->
    <fo:simple-page-master master-name="other-page" page-width="21cm" page-height="29.7cm">
      <fo:region-body />
      <fo:region-before region-name="other-page-header" />
      <fo:region-after region-name="other-page-footer" />
    </fo:simple-page-master>
    <!--page master for last page-->
    <fo:simple-page-master master-name="last-page" page-width="21cm" page-height="29.7cm">
      <fo:region-body />
      <fo:region-before region-name="last-page-header" />
      <fo:region-after extent="52mm" region-name="last-page-footer" />
    </fo:simple-page-master>
    <fo:page-sequence-master master-name="pages">
      <fo:repeatable-page-master-alternatives>
        <fo:conditional-page-master-reference page-position="first" master-reference="first-page" />
        <fo:conditional-page-master-reference page-position="rest" master-reference="other-page" />
        <fo:conditional-page-master-reference page-position="last" master-reference="last-page" />
      </fo:repeatable-page-master-alternatives>
    </fo:page-sequence-master>
  </fo:layout-master-set>


  <fo:page-sequence master-reference="pages" font-family="Arial">
    <fo:flow flow-name="xsl-region-body">
      <fo:block-container break-after="page">
        <fo:block>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perferendis accusantium, culpa error totam odit blanditiis vitae facere, amet consequatur ratione laudantium velit quaerat delectus maiores ex deleniti soluta quas nostrum!</fo:block>
      </fo:block-container>
      <fo:block-container>
        <fo:block>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consectetur quod repellendus suscipit, quae fugit! Aliquid corrupti enim odio et rerum assumenda, veritatis, excepturi earum laborum fugit ea consequuntur explicabo eveniet!</fo:block>
      </fo:block-container>
      <fo:block id="end" />
    </fo:flow>
  </fo:page-sequence>
</fo:root>

这篇关于XSL-FO - 如何为 fo:region-body 创建静态内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆