0

我需要使用 fo:leader 创建一个包含请求和响应的表,如下所示:

像这样的表领导

然而最终的结果是这样的:

两个块对齐顶部

我的问题是当左块有 2 行而右块有 2 行时,它们都在顶部对齐。我需要对齐顶部的左块和底部的右块。

那可能吗?

按照实际代码:

<fo:inline-container vertical-align="top" inline-progression-dimension="60%">
<fo:block start-indent="0.5em" text-indent="-0.5em" text-align-last="justify" margin-right="0.3cm"<xsl:value-of select="challenge/para|limitdesc/para|sopitem/para"/>
<fo:leader leader-pattern="dots"/</fo:block>
</fo:inline-container>
<fo:inline-container relative-position="relative" vertical-align="bottom" display-align="after" inline-progression-dimension="40%">
<fo:block start-indent="0.5em" text-indent="-0.5em" display-align="after"><xsl:value-of select="response/para|limitvalue/para|limittext/para|act/para"/></fo:block>
</fo:inline-container>
4

2 回答 2

0

扩展@tmakita 的答案,您可以使用alignment-baseline来对齐两者的基线(参见https://www.w3.org/TR/xsl11/#fo_inline-containerfo:inline-container的讨论)。

您可以使用last-line-end-indent(参见https://www.w3.org/TR/xsl11/#last-line-end-indent)让领导项目超过文本末尾,但您还需要限制文本。在这个例子中,我在第一个fo:block-container里面使用了一个fo:inline-container

<fo:block>
    <fo:inline-container vertical-align="top" inline-progression-dimension="60%" alignment-baseline="text-after-edge">
        <fo:block-container width="50%">
            <fo:block start-indent="0.5em" text-indent="-0.5em" text-align-last="justify" last-line-end-indent="-100%">
            [3] Text here text here text here text here text here text here text here text here text here text here text here text here text here Text here text here text here text here text here text here text here<fo:leader leader-pattern="dots" leader-length.minimum="50%" leader-length.optimum="50%"/></fo:block>
        </fo:block-container>
    </fo:inline-container><fo:inline-container inline-progression-dimension="40%">
                <fo:block start-indent="0.5em" text-indent="-0.5em">
                    Continued text here text here text here text here
                </fo:block>
            </fo:inline-container>
</fo:block>

除非您希望最后一行上的文本能够超出其余部分,否则最小和最佳前导长度应该至少是两组文本之间间隙的宽度。

于 2018-05-08T15:45:56.623 回答
0

我尝试使用 AH Formatter 并找到了两种解决方案。

[1]baseline-shift用于后者fo:inline-container

<fo:block>
    <fo:inline-container vertical-align="top" inline-progression-dimension="60%">
        <fo:block start-indent="0.5em" text-indent="-0.5em" text-align-last="justify">
            [1] Text here text here text here text here text here text here text here
            <fo:leader leader-pattern="dots"/></fo:block></fo:inline-container><fo:inline-container baseline-shift="-1.44em" inline-progression-dimension="40%">
        <fo:block start-indent="0.5em" text-indent="-0.5em" display-align="after">
            Continued text here text here text here text here
        </fo:block>
    </fo:inline-container>
</fo:block>

我指定了`baseline-shift="-1.44em"。(这取决于使用的字体)此方法仅在第一行数等于 2 时有效。

[2] 使用fo:table代替fo:inline-container

<fo:table width="100%">
    <fo:table-column column-number="1" column-width="60%"/>
    <fo:table-column column-number="2" column-width="40%"/>
    <fo:table-body>
        <fo:table-row>
            <fo:table-cell>
                <fo:block start-indent="0.5em" text-indent="-0.5em" text-align-last="justify">
                    [2] Text here text here text here text here text here text here text here
                    <fo:leader leader-pattern="dots"/></fo:block>
            </fo:table-cell>
            <fo:table-cell/>
        </fo:table-row>
        <fo:table-row>
            <fo:table-cell/>
            <fo:table-cell padding-before="-1.32em">
                <fo:block start-indent="0.5em" text-indent="-0.5em" display-align="after">
                    Continued text here text here text here text here
                </fo:block>
            </fo:table-cell>
        </fo:table-row>
    </fo:table-body>
</fo:table>

此方法不依赖于第一个中的文本行fo:table-cell

使用 AH Formatter GUI 的两个格式化结果:

AH Formatter GUI 中的格式化结果

我的格式化程序版本是 6.4。但结果将是相同的。

于 2018-05-08T12:09:26.830 回答