如何使用XSL-FO将列的内容溢出到下一列?

时间:2009-11-09 18:30:30

标签: xslt xsl-fo multiple-columns

我有一个包含三列的表格,其中我试图让一些长段落动态地从第一列流入第二列然后再流入第三列。目前,当第一列溢出而不是移动到第二列时,该表将在下一页继续,因此我得到几个页面只填充了一列的数据。我怎样才能解决这个问题?这是我的代码(我在其中编辑了具体内容),其中text1-text8是文本的动态段落:

<fo:table table-layout="fixed" width="100%" border-collapse="collapse">
    <fo:table-column column-width="33.333%" column-number="1"/>
    <fo:table-column column-width="33.333%" column-number="2"/>
    <fo:table-column column-width="33.333%" column-number="3"/>
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell padding="2pt">
                <fo:block>
                    <fo:inline font-weight="bold" font-size="10pt">TEXT</fo:inline>
                </fo:block>
                <fo:block font-weight="bold" font-size="10pt">TEXT</fo:block>
                <fo:block font-weight="bold" font-size="10pt">TEXT</fo:block>
                <fo:block font-weight="bold" font-size="10pt">
                    <xsl:value-of select="@day"/>
                    <xsl:text> </xsl:text>
                    <xsl:value-of select="@month"/>
                    <xsl:text> </xsl:text>
                    <xsl:value-of select="@year"/>
                    <xsl:text> </xsl:text>
                </fo:block>
            </fo:table-cell>
            <fo:table-cell padding="2pt">
                <fo:block text-align="right" font-size="14pt"> *</fo:block>
            </fo:table-cell>
            <fo:table-cell padding="2pt">
                <fo:block>
                    <fo:inline font-weight="bold" font-size="14pt">TEXT</fo:inline>
                    <fo:inline font-weight="bold" font-size="14pt">
                        <xsl:value-of select="@data"/>
                    </fo:inline>
                </fo:block>
                <fo:block>&#x00A0;</fo:block>
                <fo:block>&#x00A0;</fo:block>
                <fo:block>
                    <fo:inline font-weight="bold" font-size="12pt">TEXT</fo:inline>
                    <fo:inline font-weight="bold" font-size="12pt">
                        <xsl:value-of select="@day"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="@month"/>
                        <xsl:text> </xsl:text>
                        <xsl:value-of select="@year"/>
                    </fo:inline>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row height="18px">
            <fo:table-cell padding="2pt">
                <fo:block/>
            </fo:table-cell>
            <fo:table-cell padding="2pt">
                <fo:block/>
            </fo:table-cell>
            <fo:table-cell padding="2pt">
                <fo:block/>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row>
            <fo:table-cell padding="2pt" number-columns-spanned="3">
                <fo:block text-align="center" font-size="12pt" font-weight="bold">
                    <xsl:value-of select="data"/>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row>
            <fo:table-cell padding="2pt">
                <fo:block/>
            </fo:table-cell>
            <fo:table-cell padding="2pt">
                <fo:block/>
            </fo:table-cell>
            <fo:table-cell padding="2pt">
                <fo:block/>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row>
            <fo:table-cell padding="2pt" number-columns-spanned="3">
                <fo:block text-align="center" font-size="14pt" font-weight="bold">
                    <xsl:value-of select="moredata"/>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row>
            <fo:table-cell padding="2pt" number-columns-spanned="3">
                <fo:block>
                    <fo:leader leader-pattern="rule" leader-length="100%"/>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row>
            <fo:table-cell padding="2pt">
                <fo:block>
                    <fo:external-graphic content-width="217.429px" scaling="uniform">
                        <xsl:attribute name="src">
                            <xsl:text>url("</xsl:text>
                            <xsl:value-of select="image"/>
                            <xsl:text>.png")</xsl:text>
                        </xsl:attribute>
                    </fo:external-graphic>
                </fo:block>
                <fo:block>
                    <fo:leader leader-pattern="rule" leader-length="100%"/>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt" fo:font-weight="normal">
                        <xsl:value-of select="text1"/>
                    </fo:inline>
                </fo:block>
                <fo:block/>
                <fo:block>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text2"/>
                    </fo:inline>
                </fo:block>
                <fo:block/>
                <fo:block>
                    <fo:inline font-weight="bold" font-size="10pt">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text3"/>
                    </fo:inline>
                </fo:block>
                <fo:block>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text4"/>
                    </fo:inline>
                </fo:block>
                <fo:block>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text5"/>
                    </fo:inline>
                </fo:block>
                <fo:block>&#x00A0;</fo:block>
                <fo:block>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text6"/>
                    </fo:inline>
                </fo:block>
                <fo:block>&#x00A0;</fo:block>
                <fo:block>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text7"/>
                    </fo:inline>
                </fo:block>
                <fo:block>&#x00A0;</fo:block>
                <fo:block>
                    <fo:inline font-size="10pt" font-weight="bold">TEXT</fo:inline>
                    <fo:inline font-size="10pt">
                        <xsl:value-of select="text8"/>
                    </fo:inline>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>

        <fo:table-row>
            <fo:table-cell padding="2pt" number-columns-spanned="3">
                <fo:block>
                    <fo:leader leader-pattern="rule" leader-length="100%"/>
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>

3 个答案:

答案 0 :(得分:0)

与HTML类似,XSL-FO中的表格用于表格数据。您希望在页面正文中使用来继续显示文本:

    <fo:simple-page-master master-name="blarg">
        <fo:region-body column-count="3" column-gap="0.5in"/>
    </fo:simple-page-master>

答案 1 :(得分:0)

要使包含列的文本指定要包含列的主体。然后使用<fo:block span=all>表示需要跨越所有列的元素。

对于您的文档,最好为需要列的部分创建单独的simple-page-master,以便最小化将元素设置为跨越所有列的需要。

答案 2 :(得分:0)

您可以使用

<fo:simple-page-master master-name="blarg">
    <fo:region-body column-count="3" column-gap="0.5in"/>
</fo:simple-page-master>

并在主fo:flow中有类似的内容:

<fo:block span="all>Some text that will span across all columns</fo:block>
<fo:block>some code that will flow in 3 columns</fo:block>
<fo:block span="all>Some text that will (again) span across all columns</fo:block>

如果您在同一页面上同时需要2列和3列,则需要其中一个供应商提供扩展名。如果您需要,请告诉我,我会尽力为您找到它。