Ориентация страниц в зависимости от состояния - PullRequest
0 голосов
/ 17 марта 2020

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

Я установил свой документ так:

<fo:layout-master-set>
        <fo:simple-page-master master-name="first-page" page-height="29.7cm" page-width="21.0cm" margin="1cm 2.1cm 0.8cm 2.1cm">
          <fo:region-body region-name="xsl-region-body" margin-top="105px" margin-bottom="50px"/>
          <fo:region-before region-name="xsl-region-before-first" extent="5in"/>
          <fo:region-after region-name="xsl-region-after" extent="5in" display-align="after"/>
        </fo:simple-page-master>
    <fo:simple-page-master master-name="other-page" page-height="21.0cm" page-width="29.7cm" margin="1cm 2.1cm 0.8cm 2.1cm">
      <fo:region-body region-name="xsl-region-body" margin-top="105px" margin-bottom="50px"/>
      <fo:region-before region-name="xsl-region-before-other" extent="5in"/>
      <fo:region-after region-name="xsl-region-after" extent="5in" display-align="after"/>
    </fo:simple-page-master>
        <fo:page-sequence-master master-name="pages">
      <fo:repeatable-page-master-alternatives>
              <fo:conditional-page-master-reference page-position="first" master-reference="first-page"/>
              <fo:conditional-page-master-reference page-position="only" master-reference="other-page"/>
      </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>
  </fo:layout-master-set>


<fo:page-sequence master-reference="pages">
 <fo:static-content flow-name="xsl-region-before-first">
...
 </fo:static-content>
 <fo:static-content flow-name="xsl-region-before-first">
...
 </fo:static-content>
 <fo:static-content flow-name="xsl-region-before-first">
...
 </fo:static-content>
 <fo:flow flow-name="xsl-region-body">
 ...
 </fo:flow>

Это генерирует первую вертикаль сначала страница, а затем все остальные горизонтальные страницы. Эти горизонтальные страницы генерируются для каждого l oop. Что я хотел бы сделать, так это то, что после определенного c page-before = "break", который может находиться в любой позиции, я мог бы изменить макет следующей страницы в зависимости от данных для каждого элемента.

Редактировать: я использую xmlns: fo версии 2.0 Мой точный документ должен выглядеть следующим образом:

  • Первая страница (работает нормально)
  • X страниц: LANDSCAPE VIEW, созданный с использованием a-for-l l 1023 * overe itemsA (работает нормально)
  • Y страниц: ПРОСМОТР ПОРТРЕТА, созданный с использованием l-1023 * overe items для каждого (это то, что я не знаю, как делать, как изменить с пейзажа на портрет)
    <xsl:for-each select="itemsA">
    ...printed stuff...
    </xsl:for-each>
    <fo:block break-before="page">
    <xsl:for-each select="itemsB">
    ...printed stuff...
    </xsl:for-each>

1 Ответ

1 голос
/ 18 марта 2020
  1. Создайте отдельный fo:page-sequence-master (или fo:simple-page-master, если нет разницы между левыми / правыми страницами и т. Д. c.).
  2. Переместите fo:page-sequence-master внутрь каждого xsl:for-each, с fo:page-sequence-master, ссылающимся на соответствующий fo:page-sequence-master (или `fo: simple-page-master).

Т.е.:

<xsl:for-each select="itemsA">
  <fo:page-sequence master-reference="landscape">
    ...printed stuff...
  </fo:page-sequence>
</xsl:for-each>
<xsl:for-each select="itemsB">
  <fo:page-sequence master-reference="portrait">
    ...printed stuff...
  </fo:page-sequence>
</xsl:for-each>

Вам не нужно <fo:block break-before="page">, потому что fo:page-sequence всегда генерирует новую последовательность страниц.

...