将封面插入 XSL:FO 模板

Inserting a cover page into XSL:FO template

我处理过这些文档,我需要编辑现有代码才能映射数据库中的字段。 XSL 文档已经有了模板和区域。我的目标是在模板的任何边距出现之前添加一个封面。

代码如下所示:

<fo:layout-master-set>
    <fo:simple-page-master master-name="Letter Page" page-width="8.3in" page-height="11.7in" 
        margin-top="0px" margin-bottom="0px" margin-right="0px" margin-left="0px">
        <fo:region-body region-name="xsl-region-body" 
            padding-top="0px" padding-bottom="0px" padding-left="0px" padding-right="0px" 
            margin-top="4.250cm" margin-bottom="2.750cm" margin-left="1.8cm" margin-right="1.8cm" 
            border-style="none" border-width="0px" border-color="" background="" background-repeat="no-repeat" background-position-horizontal="0px" background-position-vertical="0px" 
            extent="0px" column-gap="0px" column-count="1" reference-orientation="0"/>
        <fo:region-before region-name="xsl-region-before" 
            display-align="after" extent="3.8cm" 
            padding-top="0px" padding-bottom="0px" padding-left="0px" padding-right="0px" 
            border-style="none" border-width="0px" border-color="" background="" background-repeat="no-repeat" background-position-horizontal="0px" background-position-vertical="0px" reference-orientation="0"/>
        <fo:region-after region-name="xsl-region-after" 
            display-align="before" extent="2.750cm" 
            padding-top="0px" padding-bottom="0px" padding-left="0px" padding-right="0px" 
            border-style="none" border-width="0px" border-color="" background="" background-repeat="no-repeat" background-position-horizontal="0px" background-position-vertical="0px" reference-orientation="0"/>
        <fo:region-start region-name="xsl-region-start" 
            extent="1.8cm" 
            padding-top="0px" padding-bottom="0px" padding-left="0px" padding-right="0px" 
            border-style="none" border-width="0px" border-color="" background="" background-repeat="no-repeat" background-position-horizontal="0px" background-position-vertical="0px" reference-orientation="0"/>
        <fo:region-end region-name="xsl-region-end" 
            extent="1.8cm" 
            padding-top="0px" padding-bottom="0px" padding-left="0px" padding-right="0px" 
            border-style="none" border-width="0px" border-color="" background="" background-repeat="no-repeat" background-position-horizontal="0px" background-position-vertical="0px" reference-orientation="0"/>
    </fo:simple-page-master>
</fo:layout-master-set>

然后页面开始为

<fo:page-sequence master-reference="Letter Page">  
    <fo:static-content flow-name="xsl-region-before" font-size="8pt" font-family="Arial">

紧随其后的是任何其他地区等。我查看了如何插入一些封面,但尝试时总是出现错误,我使用的只是记事本++,每次测试时都会渲染 pdf,所以它变得非常耗时的过程。我决定只用一张图片作为封面以节省时间。我知道这是一个 FOP 引擎 1.0。

我相信你想尝试的是为你的封面定义一个新的 simple-page-master ,如果你不担心边距等,你只需要给出 region-body 定义,并且那么您想查看您拥有的页面序列。在 fo 中,页面顺序正是它听起来的样子,它是您插入各种页面的顺序。如果您也查看 this example, you can see how page-sequences are defined and how you can programmatically control which pages you render and the order to do so in. If you want a more intricate or complex example, you could look at this

如果您正在寻找有关如何将此应用到现有模板的更详细说明,那么有关您的模板当前功能的更多详细信息可能会有所帮助。

这里有一个简单的例子可以帮助您完成整个过程:

<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:layout-master-set>
        <fo:simple-page-master page-width="8.5in" page-height="11in" master-name="Cover">
            <fo:region-body margin-top="0pt" background-color="red"/>
            <fo:region-before extent="0pt"/>
            <fo:region-after extent="0pt"/>
        </fo:simple-page-master>
        <fo:simple-page-master margin-top="1in" margin-left="1in"
            margin-bottom="18pt" margin-right="18pt"
            page-width="8.5in" page-height="11in" master-name="Pages">
            <fo:region-body margin-top="0pt"/>
            <fo:region-before extent="0pt"/>
            <fo:region-after extent="0pt"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="Cover">
        <fo:flow flow-name="xsl-region-body">
            <fo:block text-align="center">
                I am a Cover Page, format me however you wish!
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
    <fo:page-sequence master-reference="Pages">
        <fo:flow flow-name="xsl-region-body">
            <fo:block>
                I am the rest of the text in the "Pages" page-sequence.
            </fo:block>
        </fo:flow>
    </fo:page-sequence>
</fo:root>

"Cover" 页面序列可以包含任何你想要的内容(我放了一些文本并将其设为红色),"Pages" 页面序列包含其余内容。

这会产生一个像这样的两页文档: