xsl-fo header - изображение слева, три строки текста справа, выравнивание по верху - PullRequest
3 голосов
/ 14 июня 2010

Используя apache FOP, вы хотите создать заголовок с логотипом, выровненным по левому краю, трехстрочный адрес, выровненный по правому краю, оба выровненные по верху.

Следующее работает нормально, если выполняется внутри потока, но в заголовке статического содержимого ('xsl-region-before') он получает правильное влево и вправо, но выравнивает логотип под блоком адреса, как если бы определение таблицы полностью игнорируется.

Я пробовал другие варианты, такие как попытка встроить два или использовать плавающие числа, с похожими результатами. Заголовок просто обрабатывает их как отдельные блоки и складывает их. У кого-нибудь есть предложения?

Я обнаружил, что эта другая проблема задает тот же вопрос о нижних колонтитулах, увы нет ответов: Нужны instream-foreign-object и text для выравнивания по низу в XSL-FO

Ниже приведен соответствующий фрагмент:

    <fo:layout-master-set>
        <fo:simple-page-master page-height="8.5in" page-width="11in" master-name="only" margin=".5in .5in .5in .5in">
            <fo:region-body region-name="xsl-region-body" margin-top="1in" margin-bottom=".5in"/>
            <fo:region-before region-name="xsl-region-before"/>
            <fo:region-after region-name="xsl-region-after"/>
        </fo:simple-page-master>
    </fo:layout-master-set>
    <fo:page-sequence master-reference="only">
        <fo:static-content flow-name="xsl-region-before">
                <fo:block font-size="7pt">
                    <fo:table width="10in">
                        <fo:table-column/>
                        <fo:table-column/>
                        <fo:table-body>
                            <fo:table-row>
                                <fo:table-cell>
                                    <fo:block>
                                        <fo:external-graphic src="img/print_logo.png" content-width="2in"/>
                                    </fo:block>
                                </fo:table-cell>
                                <fo:table-cell display-align="center">
                                    <fo:block text-align="right">
                                        123 Credibility Street
                                    </fo:block>
                                    <fo:block text-align="right">
                                        Chicago, IL  60606
                                    </fo:block>
                                    <fo:block text-align="right">
                                        312-123-4567
                                    </fo:block>
                                </fo:table-cell>
                            </fo:table-row>
                        </fo:table-body>
                    </fo:table>
                </fo:block>
        </fo:static-content>

Ответы [ 2 ]

4 голосов
/ 15 июня 2010

Мне удалось добиться желаемого эффекта, поместив два элемента в два отдельных блок-контейнера с абсолютным позиционированием:

<fo:static-content flow-name="xsl-region-before">
    <fo:block-container position="absolute">
        <fo:block>
            <fo:external-graphic src="img/print_logo.png" content-width="2in"/>
        </fo:block>
    </fo:block-container>
    <fo:block-container position="absolute">
        <fo:block text-align="right">
            123 Credibility Street
        </fo:block>
        <fo:block text-align="right">
            Chicago, IL  60606
        </fo:block>
        <fo:block text-align="right">
            312-123-4567
        </fo:block>
    </fo:block-container>
</fo:static-content>
1 голос
/ 02 мая 2012

Уже поздно отвечать, но на запрос нужно ответить. Итак, вот оно:

Да, здесь требуется абсолютное позиционирование, но более важна последовательность размещения блок-контейнера.

Содержимое с последним контейнером будет поверх других.

...