3

私はかなり複雑なテーブルを持っていますが、それが私の問題の原因だと思います。テーブルは、クライアント データベースの XML ファイルから取得したデータに基づいて入力されます。以下は、XML に適用しようとしている XSL コードの抜粋です。

<fo:table-row>
    <fo:table-cell number-columns-spanned="2">
        <fo:block/>
    </fo:table-cell>
    <fo:table-cell number-columns-spanned="2">
        <fo:block/>
    </fo:table-cell>
</fo:table-row>
<xsl:for-each select="xml/value">
    <fo:table-row>
        <fo:table-cell number-columns-spanned="2">
            <fo:block>
                <xsl:value-of select="@value"/>/>
            </fo:block>
        </fo:table-cell>
        <fo:table-cell number-columns-spanned="2">
            <fo:block>
                <xsl:value-of select="@othervalue"/>/>
            </fo:block>
        </fo:table-cell>
        </fo:table-row>
</xsl:for-each>

これは束ねられて 1 つの行のように扱われるため、この大きな行のどこかでページが分割されると、行が分割されているように見えます。

keep-together.within-page="always"、page-break-inside="avoid"、keep-with-previous.within-page="always"、および keep-with-next.within- を使用してみましたテーブルとさまざまな組み合わせの反復ブロックで page="always" ですが、何も固執していないようです。誰でもこれに対する解決策を見つけることができますか? どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

1

私が(しぶしぶ)使用したこれに対する回避策は、ネストされたテーブルです。このソリューションを使用すると(うまくいく場合)table-layout="fixed"、テーブルで使用し、列とその幅を明示的に指定して、列が整列していることを確認するのが最善です。したがって、物事を少し整理し、保守性を高めるために、さらにいくつかのテンプレートを導入します。

<xsl:template match="Whatever">
    <fo:table table-layout="fixed">
        <xsl:call-template name="fourColumnTemplate"/>
        <fo:table-body>
            <!-- UNSEEN ROWS HERE -->
            <!-- UNSEEN ROWS HERE -->
            <!-- UNSEEN ROWS HERE -->
            <fo:table-row keep-together.within-page="always">
                <fo:table-cell number-columns-spanned="4">
                    <fo:block>
                        <xsl:call-template name="outputXmlValueTable">
                            <xsl:with-param name="xmlNodes" select="xml/value"/>
                        </xsl:call-template>
                    </fo:block>
                </fo:table-cell>
            </fo:table-row>
        </fo:table-body>
    </fo:table>
</xsl:template>

<xsl:template name="fourColumnTemplate">
    <!-- note that these values should only be specified in one place for maintenance reasons -->
    <fo:table-column column-width="proportional-column-width(2)"/>
    <fo:table-column column-width="proportional-column-width(3)"/>
    <fo:table-column column-width="proportional-column-width(2)"/>
    <fo:table-column column-width="proportional-column-width(3)"/>
</xsl:template>

<xsl:template name="outputXmlValueTable">
    <xsl:param name="xmlNodes"/>
    <fo:table table-layout="fixed">
        <xsl:call-template name="fourColumnTemplate"/>
        <fo:table-header>
            <fo:table-row>
                <fo:table-cell number-columns-spanned="2">
                    <fo:block>Title1</fo:block>
                </table-cell>
                <fo:table-cell number-columns-spanned="2">
                    <fo:block>Title2</fo:block>
                </table-cell>
            </fo:table-row>
        </fo:table-header>
        <fo:table-body>
            <xsl:apply-templates select="$xmlNodes" mode="outputXmlValueRow"/>
        </fo:table-body>
    </fo:table>
</xsl:template>

<xsl:template match="*" mode="outputXmlValueRow">
    <fo:table-row>
        <fo:table-cell number-columns-spanned="2">
            <fo:block>
                <xsl:value-of select="@value"/>/>
            </fo:block>
        </fo:table-cell>
        <fo:table-cell number-columns-spanned="2">
            <fo:block>
                <xsl:value-of select="@othervalue"/>/>
            </fo:block>
        </fo:table-cell>
    </fo:table-row>
</xsl:template>
于 2013-07-01T16:46:58.823 に答える