fo:page-sequence два столбца не отображаются в выводе XSL-FO

Я хотел попробовать макет из двух столбцов для небольшой таблицы. Я скопировал существующий файл simple-page-master и добавил column-count="2". (Я не включаю верхние и нижние колонтитулы для краткости.) Шаблон работает, как и ожидалось, если я удалю fo:page-sequence и fo:flow, но в противном случае я ничего не получаю в своем выводе. Я попытался заменить numIndex другим шаблоном, и это также не удалось.

Я использую антенный дом. Как всегда, я ценю любые предложения.

<fo:simple-page-master master-name="body-page-two-col" xsl:use-attribute-sets="odd-page-atts">
    <fo:region-body region-name="region-body" xsl:use-attribute-sets="body-atts" column-count="2"/>
</fo:simple-page-master>

<xsl:attribute-set name="odd-page-atts">
        <xsl:attribute name="page-height">11in</xsl:attribute>
        <xsl:attribute name="page-width">8.5in</xsl:attribute>
        <xsl:attribute name="margin-top">1.5pc</xsl:attribute>
        <xsl:attribute name="margin-bottom">1.5pc</xsl:attribute>
        <xsl:attribute name="margin-left">1in</xsl:attribute>
        <xsl:attribute name="margin-right">.5in</xsl:attribute>
    </xsl:attribute-set>

<xsl:attribute-set name="body-atts">
        <xsl:attribute name="margin-top">4.5pc</xsl:attribute>
        <xsl:attribute name="margin-bottom">4.5pc</xsl:attribute>
    </xsl:attribute-set>

    <xsl:template name="numIndex">
        <fo:page-sequence master-reference="body-page-two-col" initial-page-number="auto" format="1">
            <fo:flow flow-name="region-body">
<fo:block>
            <fo:table-and-caption>
                <fo:table-caption>
                    <fo:block>
                        <xsl:text>Numerical Index</xsl:text>
                    </fo:block>
                </fo:table-caption>
                <fo:table>
                <xsl:attribute name="id"><xsl:apply-templates select="ancestor::dmodule/identAndStatusSection/dmAddress/dmIdent/dmCode"/><xsl:text>tbl-numidx001</xsl:text></xsl:attribute>
                    <fo:table-header>
                        <fo:table-row>
                                <fo:table-cell>
                                    <fo:block font-size="11pt" font-style="italic" >                            
                                    <fo:retrieve-table-marker retrieve-class-name="continued-ni" retrieve-boundary-within-table="table"/>
                                </fo:block>
                            </fo:table-cell>
                        </fo:table-row>
                    </fo:table-header>
                    <fo:table-body>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:marker marker-class-name="continued-ni"/>
                                 <fo:marker marker-class-name="continued-ni">
                                    <fo:block text-align="center">Numerical Index&#160; (Continued)
                                    </fo:block>
                                 </fo:marker>
                            </fo:table-cell>
                        </fo:table-row>
                        <fo:table-row>
                            <fo:table-cell>
                                <fo:table border-bottom="solid" border-bottom-width=".5pt" 
                border-top="solid" border-top-width=".5pt" font-size="8pt" 
                margin-bottom="8pt" margin-left="3pt" margin-right="3pt" margin-top="8pt" 
                relative-position="static" space-after.maximum="12pt" space-after.minimum="12pt" 
                space-after.optimum="12pt" space-before.maximum="14pt" space-before.minimum="12pt" 
                space-before.optimum="12pt" span="all" table-layout="fixed" table-omit-header-at-break="false" 
                table-omit-footer-at-break="true" text-align="start" white-space-treatment="preserve" 
                width="3.0in" hyphenate="true" cols="4">
                    <fo:table-column column-number="1" column-width="30%"/>
                    <fo:table-column column-number="2" column-width="20%"/>
                    <fo:table-column column-number="3" column-width="20%"/>
                    <fo:table-column column-number="4" column-width="20%"/>
                    <fo:table-header>
                        <xsl:call-template name="NI-HEADER"/>
                    </fo:table-header>
                <fo:table-body>     
                    <xsl:call-template name="SortParts"/>
                </fo:table-body>
            </fo:table>
            </fo:table-cell>
            </fo:table-row>
                </fo:table-body>
                </fo:table>
                </fo:table-and-caption>
                </fo:flow>
</fo:block>
                </fo:page-sequence>
        </xsl:template>

Вот что вызывает numIndex:

<xsl:template match="illustratedPartsCatalog">
            <xsl:apply-templates />
            <xsl:call-template name="numIndex"/>
    </xsl:template>

person Caroline    schedule 14.04.2017    source источник


Ответы (2)


Если я вас правильно понял, вам нужна таблица, которая состоит из двух столбцов в рамках вашего обычного потока из одного столбца. Поскольку вы используете AH Formatter, вы можете использовать fo:block-container с двумя столбцами, чтобы содержать только таблицу. См. https://www.antennahouse.com/product/ahf64/ahf-ext.html#axf.column-count. Однако это не даст вам маркера «(продолжение)». Для этого вы можете поместить fo:block-container в качестве дочернего элемента fo:table-cell из внешнего fo:table.

Однако, поскольку я совсем не уверен, что понимаю ваше требование, не могли бы вы сделать простую графическую иллюстрацию того, что вы ищете?

Кроме того, если, как показано в примере кода, fo:simple-page-master находится за пределами xsl:template, XSLT-процессор проигнорирует его и не отобразит в файле FO.

Согласно https://www.w3.org/TR/xslt#stylesheet-element< /а>:

процессор XSLT всегда может игнорировать такие элементы верхнего уровня и должен игнорировать элемент верхнего уровня без выдачи ошибки, если он не распознает URI пространства имен.

person Tony Graham    schedule 25.04.2017
comment
Что касается fo:simple-page-master, этот синтаксис неверен? fo:simple-page-master находился в отдельном файле с другими наборами страниц (который вызывается из основного файла .xsl), и я не собирался возиться с fo:page-sequence-master и верхними и нижними колонтитулами, пока не заработал формат двух столбцов. - person Caroline; 25.04.2017
comment
Проблема не в синтаксисе, а в расположении разметки. Поскольку fo:simple-page-master оказывается за пределами любого xsl:template, он не попадет в результирующий документ. То же самое верно для любого элемента, отличного от XSLT, который является дочерним элементом xsl:stylesheet, поэтому он не имеет ничего общего с правильностью вашей разметки XSL-FO. - person Tony Graham; 26.04.2017
comment
Это сработало отлично. На последней странице всего десять строк таблицы, и она разбита на два столбца. Есть ли способ сохранить все строки в первом столбце? - person Caroline; 14.06.2017

Я вижу 2 проблемы:

  1. Вы указали width="7.0in" для таблицы fo:table, поэтому она не поместится в более узкий столбец. Ваши столбцы составляют всего 3,5 дюйма за вычетом промежутка между столбцами (12pt, если вы не укажете иное). Таблица будет перетекать на первую основную страницу, которая достаточно широка, чтобы вместить их.

  2. template match="illustratedPartsCatalog" сначала применяет шаблоны. Если это сгенерирует последовательность страниц и не закроет ее, call-template name="numIndex" попытается создать вложенную последовательность страниц, и это не сработает.

Шаблон FO начинается с </fo:layout-master-set>.

Затем есть два способа продолжить: вы можете использовать template match="node" для сопоставления каждого дочернего элемента корневого узла в XML, или вы можете использовать команды xsl:call-template. Это дает вам больше гибкости, вы можете создать шаблон, который генерирует одну последовательность страниц, содержащую более одного дочернего элемента корневого узла.

Итак, вы можете сделать это:

<xsl:call-template name="insertIllustratedPartsCatalog"/>
<xsl:call-template name="numIndex"/>

где insertIllustratedPartsCatalog создает последовательность страниц для каталога деталей, а numIndex создает последовательность страниц для указателя.

(трудно получить более конкретную информацию, не видя всего шаблона FO).

person Hobbes    schedule 19.04.2017
comment
Спасибо, я изменил ширину на 3 дюйма, но ничего не отображается. - person Caroline; 19.04.2017
comment
Еще раз спасибо, я добавил блок и тот же результат. Как узнать, закрыта ли последовательность страниц с illustratedPartsCatalog? - person Caroline; 19.04.2017
comment
Если вы используете графический интерфейс Antennahouse, вы можете сделать File->Save FO, это сохранит результат преобразования FO. Каталог Illustratedparts должен содержать только один элемент последовательности страниц, а не вложенные элементы последовательности страниц. - person Hobbes; 19.04.2017
comment
В том-то и проблема, что в FO таблица числового индекса есть, но ее последовательность страниц вложена в последовательность страниц IllustratedPartsCatalog. Я собираюсь попробовать применить двухколоночный формат к namedPartsCatalog и использовать промежутки. Я не знаю, как получить числовой индекс из последовательности страниц иллюстрированного каталога деталей, потому что он генерируется из тегов иллюстрированного каталога деталей. - person Caroline; 20.04.2017
comment
Вы можете разместить xsl:call-template name="numIndex" в любом месте вашего шаблона ФО, нет необходимости вызывать его из шаблона IllustratedPartsCatalog. Вам просто нужно настроить XPath в NumIndex. - person Hobbes; 20.04.2017
comment
Вот чего я не понимаю, как зацепить вызов Numindex вне IPC, так как он зависит от IPC и должен появляться после IPC. - person Caroline; 22.04.2017
comment
fo:flow может напрямую содержать fo:table-and-caption. Разрешенный контент fo:flow (w3.org/TR/xsl11/#fo_flow) равно (%block;)+, а fo:table-and-caption является одним из %block; ФО, перечисленных в Разделе 6.2, Форматирование содержимого объекта (w3 .org/TR/xsl11/#d0e6532). - person Tony Graham; 25.04.2017
comment
AH Formatter может обрабатывать вложенные файлы fo:page-sequence. См. antennahouse.com/product/ahf64/ahf-ext. .html#fo.page-sequence. Другой вопрос, приведет ли использование вложенного fo:page-sequence к желаемому результату. - person Tony Graham; 25.04.2017