Выравнивание изображений на четных / нечетных страницах с помощью fop - PullRequest
1 голос
/ 24 мая 2019

Мне нужно выровнять изображение в теле страницы на основе номера страницы: правое выравнивание для нечетных страниц, левое для четных страниц.Изображения появляются не в верхнем и нижнем колонтитулах страницы, а в основном контенте.

При поиске был найден подход, использующий повторяющиеся-page-master-альтернативы с простыми-page-master для четных и нечетныхстраницы.Я подумал, что могу передать параметр в шаблон на основе четной / нечетной страницы и использовать его для выравнивания изображения.

Это прекрасно работает для верхних и нижних колонтитулов.Но решение использует несколько блоков fo: flow в fo: page-sequence, и fop (2.3) не нравится;он сообщает

Для "fo: page-sequence" может быть объявлено только одно "fo: flow".

error.

  <xsl:template match="/">
    <fo:root>
      <fo:layout-master-set>
        <fo:page-sequence-master master-name="recipes">          <fo:repeatable-page-master-alternatives>
            <fo:conditional-page-master-reference master-reference="recipes-odd" odd-or-even="odd"/>
            <fo:conditional-page-master-reference master-reference="recipes-even" odd-or-even="even"/>
          </fo:repeatable-page-master-alternatives>
        </fo:page-sequence-master>

        <fo:simple-page-master master-name="recipes-odd" page-height="{$height}" page-width="{$width}">
          <fo:region-body region-name="body-odd" margin="2cm"/>
          <fo:region-before region-name="before-odd" margin-top="0in" extent="3in" />
          <fo:region-after region-name="after-odd" extent=".5in" />
        </fo:simple-page-master>

        <fo:simple-page-master master-name="recipes-even" page-height="{$height}" page-width="{$width}">
          <fo:region-body region-name="body-even" margin="2cm"/>
          <fo:region-before region-name="before-even" margin-top="0in" extent="3in" />
          <fo:region-after region-name="after-even" extent=".5in" />
        </fo:simple-page-master>

      <xsl:apply-templates select="cookbook/*"/>
    </fo:root>
  </xsl:template>

  <xsl:template match="recipes">
    <fo:page-sequence master-reference="recipes">
      <fo:static-content flow-name="before-odd">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="before-even">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="after-odd">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:static-content flow-name="after-even">
        <fo:block></fo:block>
      </fo:static-content>
      <fo:flow flow-name="body-odd">
        <fo:block>
          <xsl:apply-templates select="recipe">
            <xsl:sort select="name"/>
            <xsl:with-param name="side" select="right"/>
          </xsl:apply-templates>
        </fo:block>
      </fo:flow>
      <fo:flow flow-name="body-even">
        <fo:block>
          <xsl:apply-templates select="recipe">
            <xsl:sort select="name"/>
            <xsl:with-param name="side" select="left"/>
          </xsl:apply-templates>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>
  </xsl:template>

Есть ли способ получить fop для обработки нескольких потоков?Если нет, есть ли другой подход к управлению выравниванием изображения на основе номера страницы?

...