Как выровнять 2 блока по вертикали с помощью лидеров - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно использовать 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>

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Расширяя ответ @tmakita, вы можете использовать alignment-baseline, чтобы выровнять базовые линии двух fo:inline-container (см. Обсуждение в https://www.w3.org/TR/xsl11/#fo_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>

Если вы не хотите, чтобы текст в последней строке мог проходить дальше остальных, минимальная и оптимальная длина выноски должна составлять не менее ширины промежутка между двумя наборами текста.

0 голосов
/ 08 мая 2018

Я попытался использовать 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>

I указывает `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:

Formatting result in AH Formatter GUI

My Formatter versionэто 6.4.Но результат будет таким же.

...