使内容适合 PDF 中的单个页面
Fitting the content to a single page in PDF
我正在使用 xslt 和 fo 构建 PDF。我的要求是将 PDF 的内容限制在一页内。
在某些情况下,PDF 分为两页。我必须避免这种情况。下面是主设置的代码。
<fo:layout-master-set>
<fo:simple-page-master master-name="StandardPage" page-height="250mm" page-width="297mm">
<fo:region-body margin-bottom="20mm" margin-top="12mm" margin-left="14mm" margin-right="6mm"/>
<fo:region-before region-name="headerContent" extent="12mm"/>
<fo:region-after region-name="footer" extent="20mm" precedence="true"/>
<fo:region-start region-name="leftBorder" extent="14mm"/>
<fo:region-end region-name="rightBorder" extent="6mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="StandardPage">
<fo:flow flow-name="xsl-region-body">
以下是xsl中的内容。我们有 18 个选项,同样的选项重复 18 次。
<fo:table-row>
<fo:table-cell number-columns-spanned="2">
<fo:block font-size="18pt" font-family="ABC" font-weight="bold" text-align="left" line-height="14pt">
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block>•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="4mm">
<fo:block>
<xsl:variable name="opt18" select="string(//void[@property='optionListEntryEighteen']/string/text())"/>
<xsl:value-of select="$opt18"/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
</fo:table-cell>
有时所有 18 个选项都适合一个页面,有时 16 个选项适合单个页面,接下来的两个选项将移至下一页。
我的要求是在单个页面中显示选项(如果在单个页面中显示 10 个选项,则在该页面中显示 10 个选项,不显示其他选项。
我怎样才能做到这一点?
我没有信心,但是使用 fo:single-page-master-reference 和 fo:block-container 与 @height 和 @overflow="hidden" 怎么样?这是通过 FOP 测试的。
[示例 FO 文件]
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple-page-master" page-width="10.5in" page-height="5.5in">
<fo:region-body margin-top="0.5in" margin-bottom="0.5in" margin-left="0.5in"
margin-right="0.5in"/>
<fo:region-before extent="1in" precedence="true" display-align="after"/>
<fo:region-start extent="1in"/>
<fo:region-end extent="1in"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="single-page-master">
<fo:single-page-master-reference master-reference="simple-page-master"/>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="single-page-master" reference-orientation="from-page-master-region()"
writing-mode="from-page-master-region()" >
<fo:flow flow-name="xsl-region-body" font-size="2em">
<fo:block-container height="4in" overflow="hidden" border="thin solid black">
<fo:block>optionListEntry (1)</fo:block>
<fo:block>optionListEntry (2)</fo:block>
<fo:block>optionListEntry (3)</fo:block>
<fo:block>optionListEntry (4)</fo:block>
<fo:block>optionListEntry (5)</fo:block>
<fo:block>optionListEntry (6)</fo:block>
<fo:block>optionListEntry (7)</fo:block>
<fo:block>optionListEntry (8)</fo:block>
<fo:block>optionListEntry (9)</fo:block>
<fo:block>optionListEntry (10)</fo:block>
<fo:block>optionListEntry (11)</fo:block>
<fo:block>optionListEntry (12)</fo:block>
<fo:block>optionListEntry (13)</fo:block>
<fo:block>optionListEntry (14)</fo:block>
<fo:block>optionListEntry (15)</fo:block>
<fo:block>optionListEntry (16)</fo:block>
<fo:block>optionListEntry (17)</fo:block>
<fo:block>optionListEntry (18)</fo:block>
</fo:block-container>
</fo:flow>
</fo:page-sequence>
</fo:root>
[结果]
我正在使用 xslt 和 fo 构建 PDF。我的要求是将 PDF 的内容限制在一页内。
在某些情况下,PDF 分为两页。我必须避免这种情况。下面是主设置的代码。
<fo:layout-master-set>
<fo:simple-page-master master-name="StandardPage" page-height="250mm" page-width="297mm">
<fo:region-body margin-bottom="20mm" margin-top="12mm" margin-left="14mm" margin-right="6mm"/>
<fo:region-before region-name="headerContent" extent="12mm"/>
<fo:region-after region-name="footer" extent="20mm" precedence="true"/>
<fo:region-start region-name="leftBorder" extent="14mm"/>
<fo:region-end region-name="rightBorder" extent="6mm"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="StandardPage">
<fo:flow flow-name="xsl-region-body">
以下是xsl中的内容。我们有 18 个选项,同样的选项重复 18 次。
<fo:table-row>
<fo:table-cell number-columns-spanned="2">
<fo:block font-size="18pt" font-family="ABC" font-weight="bold" text-align="left" line-height="14pt">
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block>•</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="4mm">
<fo:block>
<xsl:variable name="opt18" select="string(//void[@property='optionListEntryEighteen']/string/text())"/>
<xsl:value-of select="$opt18"/>
</fo:block>
</fo:list-item-body>
</fo:list-item>
</fo:list-block>
</fo:block>
</fo:table-cell>
有时所有 18 个选项都适合一个页面,有时 16 个选项适合单个页面,接下来的两个选项将移至下一页。
我的要求是在单个页面中显示选项(如果在单个页面中显示 10 个选项,则在该页面中显示 10 个选项,不显示其他选项。
我怎样才能做到这一点?
我没有信心,但是使用 fo:single-page-master-reference 和 fo:block-container 与 @height 和 @overflow="hidden" 怎么样?这是通过 FOP 测试的。
[示例 FO 文件]
<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simple-page-master" page-width="10.5in" page-height="5.5in">
<fo:region-body margin-top="0.5in" margin-bottom="0.5in" margin-left="0.5in"
margin-right="0.5in"/>
<fo:region-before extent="1in" precedence="true" display-align="after"/>
<fo:region-start extent="1in"/>
<fo:region-end extent="1in"/>
</fo:simple-page-master>
<fo:page-sequence-master master-name="single-page-master">
<fo:single-page-master-reference master-reference="simple-page-master"/>
</fo:page-sequence-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="single-page-master" reference-orientation="from-page-master-region()"
writing-mode="from-page-master-region()" >
<fo:flow flow-name="xsl-region-body" font-size="2em">
<fo:block-container height="4in" overflow="hidden" border="thin solid black">
<fo:block>optionListEntry (1)</fo:block>
<fo:block>optionListEntry (2)</fo:block>
<fo:block>optionListEntry (3)</fo:block>
<fo:block>optionListEntry (4)</fo:block>
<fo:block>optionListEntry (5)</fo:block>
<fo:block>optionListEntry (6)</fo:block>
<fo:block>optionListEntry (7)</fo:block>
<fo:block>optionListEntry (8)</fo:block>
<fo:block>optionListEntry (9)</fo:block>
<fo:block>optionListEntry (10)</fo:block>
<fo:block>optionListEntry (11)</fo:block>
<fo:block>optionListEntry (12)</fo:block>
<fo:block>optionListEntry (13)</fo:block>
<fo:block>optionListEntry (14)</fo:block>
<fo:block>optionListEntry (15)</fo:block>
<fo:block>optionListEntry (16)</fo:block>
<fo:block>optionListEntry (17)</fo:block>
<fo:block>optionListEntry (18)</fo:block>
</fo:block-container>
</fo:flow>
</fo:page-sequence>
</fo:root>
[结果]