0

我正在编写一个 XSLT 脚本,它将 XML 输入文档转换为 XSL-FO 中间文档,然后再转换为 PDF 输出文档。

Myfo:simple-page-master存在于三个部分中,页眉、正文和页脚。

<fo:layout-master-set>
    <fo:simple-page-master master-name="a4-portrait"
        page-width="210mm" page-height="297mm"
        margin-top="0mm" margin-right="12mm" margin-bottom="0mm" margin-left="12mm">
        <fo:region-body region-name="page-body" margin-top="20mm" margin-bottom="20mm"/>
        <fo:region-before region-name="page-header" extent="20mm"/>
        <fo:region-after region-name="page-footer" extent="20mm"/>
    </fo:simple-page-master>
    <fo:simple-page-master master-name="a4-landscape"
        page-width="297mm" page-height="210mm"
        margin-top="0mm" margin-right="12mm" margin-bottom="0mm" margin-left="12mm">
        <fo:region-body region-name="page-body" margin-top="20mm" margin-bottom="20mm"/>
        <fo:region-before region-name="page-header" extent="20mm"/>
        <fo:region-after region-name="page-footer" extent="20mm"/>
    </fo:simple-page-master>
</fo:layout-master-set>

这是一个简单的hello world页面:

<fo:page-sequence master-reference="a4-portrait">
    <!-- Page header -->
    <fo:static-content flow-name="page-header">
        <fo:block vertical-align="text-bottom">Some headline in the page header</fo:block>
        <fo:block vertical-align="text-bottom" border-bottom="0.25pt solid black"></fo:block>
    </fo:static-content>

    <!-- Page footer -->
    <fo:static-content flow-name="page-footer">
        <fo:block border-top="0.25pt solid black"></fo:block>
        <fo:block>Page <fo:page-number/></fo:block>
    </fo:static-content>

    <!-- Page body -->
    <fo:flow flow-name="page-body">
        <fo:block>Hello World!</fo:block>
    </fo:flow>
</fo:page-sequence>

如您所见,我已经尝试过这种vertical-align="text-bottom"方法。不幸的是,fo:block-elements 没有与上级元素的底部对齐。

如何编写 XSLT 以便page-header从下到上而不是从上到下编写文本?

XSLT 2.0、XPath 2.0、Apache FOP、Saxon-HE 9.8

4

1 回答 1

1

使用display-align="after"(参见https://www.w3.org/TR/xsl11/#display-align)。

display-align applies to fo:region-before (see https://www.w3.org/TR/xsl11/#fo_region-before) as well as to the other regions, fo:block-container, fo:external-graphic, fo:instream-foreign-object, fo:inline-container, and fo:table-cell.

<fo:layout-master-set>
    <fo:simple-page-master master-name="a4-portrait"
        page-width="210mm" page-height="297mm"
        margin-top="0mm" margin-right="12mm" margin-bottom="0mm" margin-left="12mm">
        <fo:region-body region-name="page-body" margin-top="20mm" margin-bottom="20mm"/>
        <fo:region-before region-name="page-header" extent="20mm" display-align="after"/>
        <fo:region-after region-name="page-footer" extent="20mm"/>
    </fo:simple-page-master>
    <fo:simple-page-master master-name="a4-landscape"
        page-width="297mm" page-height="210mm"
        margin-top="0mm" margin-right="12mm" margin-bottom="0mm" margin-left="12mm">
        <fo:region-body region-name="page-body" margin-top="20mm" margin-bottom="20mm"/>
        <fo:region-before region-name="page-header" extent="20mm" display-align="after"/>
        <fo:region-after region-name="page-footer" extent="20mm"/>
    </fo:simple-page-master>
</fo:layout-master-set>
于 2019-09-05T11:20:15.637 回答