首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSL-FO 3页流

XSL-FO 3页流
EN

Stack Overflow用户
提问于 2022-06-30 09:48:42
回答 1查看 67关注 0票数 0

我使用XSLT和XML创建XSLT,从哪里生成PDF。所使用的引擎只支持XSLT1.0。

我试图建立这样的布局:

  • 首页将有一个重复的表,可以超过1到3页。
  • 页脚:-第1页将是某些内容- "footer01";-第2页将是不同的内容- "footer02“-第3页,所有其他页面将有不同的内容-所有其他页面页脚”

“。

我所面临的问题是建立流程,以满足以下几个方面:

  • 当重复表内容(添加在Page1上)只显示在第一页上时,我需要Page2作为空白页,第3页和其他页面有任何其他的剩余内容;当重复表内容(添加在Page1上)时,
  • 足够用于两页,它可以遍历Page1和Page2,任何附加的内容都将以Page3开头。在Page1上,Page2上的页脚和以Page3开头的所有其他页面上的页脚是不同的。Page2将不再是空白的
  • ,如果在三页中显示来自Page1的重复表,它可以从Page1流到Page3 (如上面有不同的页脚),任何附加的内容都将从下一页Page4开始,Page2将不再为空白。

这有可能做到这一点吗?我需要如何设置页面集/布局?谢谢!

我尝试过简化的XSLFO,但并不满足上述所有条件:

代码语言:javascript
复制
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master master-name="Page01">
            <fo:region-body region-name="Body"/>
            <fo:region-after region-name="Page01Footer"/>
        </fo:simple-page-master>

        <fo:simple-page-master master-name="Page02">
            <fo:region-body region-name="Body"/>
            <fo:region-after region-name="Page02Footer"/>
        </fo:simple-page-master>

        <fo:simple-page-master master-name="AllPages">
            <fo:region-body region-name="Body"/>
            <fo:region-after region-name="AllPagesFooter"/>
        </fo:simple-page-master>

        <fo:page-sequence-master master-name="PagSeqMaster">
            <fo:repeatable-page-master-alternatives maximum-repeats="no-limit">
                <fo:conditional-page-master-reference master-reference="Page01"
                                                      page-position="first"/>
                <fo:conditional-page-master-reference master-reference="Page02"
                                                      blank-or-not-blank="blank"/>
                <fo:conditional-page-master-reference master-reference="AllPages"/>
            </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>

        <fo:page-sequence-master master-name="PagSeqMaster-alt">
            <fo:single-page-master-reference master-reference="Page01"/>
            <fo:single-page-master-reference master-reference="Page02"/>
            <fo:repeatable-page-master-alternatives maximum-repeats="no-limit">
                <fo:conditional-page-master-reference master-reference="AllPages"/>
            </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>
    </fo:layout-master-set>

    <fo:page-sequence master-reference="PagSeqMaster">
        <fo:static-content flow-name="Page01Footer">
            <fo:block>Footer 01</fo:block>
        </fo:static-content>

        <fo:static-content flow-name="Page02Footer">
            <fo:block>Footer 02  </fo:block>
        </fo:static-content>
        <fo:static-content flow-name="AllPagesFooter">
            <fo:block>All Other Pages Footer</fo:block>
        </fo:static-content>
        
        <fo:flow flow-name="Body">
            <fo:block>
                repeating table content starting on page 1 goes here
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>
EN

回答 1

Stack Overflow用户

发布于 2022-06-30 15:23:31

您可以通过使用axf:float-move扩展在第二个页面上生成一个零高度浮点数(参见https://www.antenna.co.jp/AHF/help/en/ahf-float.html#axf.float-move)来使用AH格式化程序来完成这一任务。浮点数会导致一页后的空白页,不会干扰两页或三页的表。

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<fo:root
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:axf="http://www.antennahouse.com/names/XSL/Extensions">
  <fo:layout-master-set>
    <fo:simple-page-master master-name="Page01">
      <fo:region-body region-name="Body"/>
      <fo:region-after region-name="Page01Footer"
               extent="1in" />
    </fo:simple-page-master>

    <fo:simple-page-master master-name="Page02">
      <fo:region-body region-name="Body"/>
      <fo:region-after region-name="Page02Footer"
               extent="1in" />
    </fo:simple-page-master>

    <fo:simple-page-master master-name="AllPages">
      <fo:region-body region-name="Body"/>
      <fo:region-after region-name="AllPagesFooter"
               extent="1in" />
    </fo:simple-page-master>

    <fo:page-sequence-master master-name="TableMaster">
      <fo:single-page-master-reference master-reference="Page01"/>
      <fo:single-page-master-reference master-reference="Page02"/>
      <fo:repeatable-page-master-reference master-reference="AllPages"/>
    </fo:page-sequence-master>
  </fo:layout-master-set>

  <fo:page-sequence master-reference="TableMaster">
    <fo:static-content flow-name="Page01Footer">
      <fo:block>Footer 01</fo:block>
    </fo:static-content>
    <fo:static-content flow-name="Page02Footer">
      <fo:block>Footer 02  </fo:block>
    </fo:static-content>
    <fo:static-content flow-name="AllPagesFooter">
      <fo:block>All Other Pages Footer</fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="Body">
      <fo:float float="before" axf:float-move="next"><fo:block/></fo:float>
      <fo:block>
        repeating table content starting on page 1 goes here
      </fo:block>
    </fo:flow>
  </fo:page-sequence>

  <fo:page-sequence master-reference="AllPages">
    <fo:static-content flow-name="AllPagesFooter">
      <fo:block>All Other Pages Footer</fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="Body">
      <fo:block>
        rest of content goes here
      </fo:block>
    </fo:flow>
  </fo:page-sequence>

  <fo:page-sequence master-reference="TableMaster">
    <fo:static-content flow-name="Page01Footer">
      <fo:block>Footer 01</fo:block>
    </fo:static-content>
    <fo:static-content flow-name="Page02Footer">
      <fo:block>Footer 02  </fo:block>
    </fo:static-content>
    <fo:static-content flow-name="AllPagesFooter">
      <fo:block>All Other Pages Footer</fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="Body">
      <fo:float float="before" axf:float-move="next"><fo:block/></fo:float>
      <fo:block>
        repeating table content starting on page 1 goes here
      </fo:block>
      <fo:block break-before="page">
        repeating table content on page 2 goes here
      </fo:block>
    </fo:flow>
  </fo:page-sequence>

  <fo:page-sequence master-reference="AllPages">
    <fo:static-content flow-name="AllPagesFooter">
      <fo:block>All Other Pages Footer</fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="Body">
      <fo:block>
        rest of content goes here
      </fo:block>
    </fo:flow>
  </fo:page-sequence>

  <fo:page-sequence master-reference="TableMaster">
    <fo:static-content flow-name="Page01Footer">
      <fo:block>Footer 01</fo:block>
    </fo:static-content>
    <fo:static-content flow-name="Page02Footer">
      <fo:block>Footer 02  </fo:block>
    </fo:static-content>
    <fo:static-content flow-name="AllPagesFooter">
      <fo:block>All Other Pages Footer</fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="Body">
      <fo:float float="before" axf:float-move="next"><fo:block/></fo:float>
      <fo:block>
        repeating table content starting on page 1 goes here
      </fo:block>
      <fo:block break-before="page">
        repeating table content on page 2 goes here
      </fo:block>
      <fo:block break-before="page">
        repeating table content on page 3 goes here
      </fo:block>
    </fo:flow>
  </fo:page-sequence>

  <fo:page-sequence master-reference="AllPages">
    <fo:static-content flow-name="AllPagesFooter">
      <fo:block>All Other Pages Footer</fo:block>
    </fo:static-content>
    
    <fo:flow flow-name="Body">
      <fo:block>
        rest of content goes here
      </fo:block>
    </fo:flow>
  </fo:page-sequence>
</fo:root>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72813675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档