Переменное или условное статическое содержимое в XSLT

У меня есть вопрос о создании различного статического контента для страниц в зависимости от номера страницы. т. е. мне нужен другой формат заголовка страницы для первой страницы и совершенно другой формат для последующих страниц.

Я использовал fo:conditional-page-master-reference для выбора одной из двух отдельных главных страниц. Но я не могу указать условия для статического содержимого, присутствующего на этой эталонной странице. то есть статический контент по определению применяется ко всем моим страницам (чего я не хочу)

Мой вопрос:

Можно ли описать такое переменное или условное статическое содержимое с помощью модели страницы XSL (simple-page-master).

С уважением, Шриватса.


person Srivatsa    schedule 07.12.2010    source источник
comment
Не могли бы вы разместить свой минимизированный тест здесь?   -  person khachik    schedule 07.12.2010


Ответы (2)


Вы можете изменить свой fo:static-content, когда вы выводите его в свой fo:page-sequence. Используя fo:marker и fo:retrieve-marker, вы можете настроить статический контент на основе информации, содержащейся на конкретной странице. Например, каждый раз, когда вы сталкивались с атрибутом revdate, вы могли вывести fo:marker. Вы получите значение этого маркера в файле fo:static-content.

Пример fo:marker:

<fo:marker marker-class-name="footerRevdate">
  <xsl:value-of select="@revdate"/>
</fo:marker>

Пример fo:retrieve-marker:

<fo:static-content flow-name="some_flow">
  <fo:block>
    <fo:retrieve-marker retrieve-class-name="footerRevdate" retrieve-boundary="page-sequence" retrieve-position="last-starting-within-page"/>
  </fo:block>
</fo:static-content>

Вы также можете установить статический контент напрямую. Этот контент будет применяться ко всем страницам в этой последовательности страниц. (Содержимое будет/может меняться для каждой последовательности страниц.) Например, вы можете вывести префикс перед номером страницы, если атрибут chapnbr равен 0.

  <xsl:template match="chapter">
    <xsl:variable name="page-prefix">
      <xsl:choose>
        <xsl:when test="number(@chapnbr)=0">INTRO-</xsl:when>
        <xsl:otherwise/>
      </xsl:choose>
    </xsl:variable>

    <fo:page-sequence master-reference="Body" font-family="Arial" font-size="10pt" force-page-count="even">
      <fo:static-content flow-name="Even_Page_regionafter">
        <fo:block>
          <xsl:value-of select="concat('Page ',$page-prefix)"/><fo:page-number/>
        </fo:block>
      </fo:static-content>
      <fo:flow flow-name="xsl-region-body">
        <fo:block>
          <xsl:apply-templates/>
        </fo:block>
      </fo:flow>
    </fo:page-sequence>

  </xsl:template>
person Daniel Haley    schedule 07.12.2010

Ну вот ....

<fo:layout-master-set>
 <fo:simple-page-master fo:master-name="Letter Page" fo:page-width="215.9mm" fo:page-height="279.4mm">
 <fo:region-body fo:region-name="xsl-region-body" fo:background-color="rgb(204,255,255)" fo:margin="50mm 17.78mm 17.78mm 17.78mm"/>
<fo:region-after fo:region-name="xsl-region-after" fo:extent="17.78mm"/>
<fo:region-start fo:region-name="xsl-region-start" fo:extent="17.78mm"/>
<fo:region-end fo:region-name="xsl-region-end" fo:extent="17.78mm"/>
<fo:region-before fo:region-name="xsl-region-before" fo:extent="0.7in"/></fo:simple-page-master>
<fo:simple-page-master fo:master-name="A4" fo:page-height="297.180mm" fo:page-width="210.82mm">
<fo:region-body fo:region-name="xsl-region-body" fo:background="rgb(255,255,153)" fo:margin="0.7in"/>
<fo:region-before fo:region-name="A4Header" fo:extent="0.7in" fo:display-align="after"/>
<fo:region-after fo:region-name="xsl-region-after" fo:extent="0.7in"/>
<fo:region-start fo:region-name="xsl-region-start" fo:extent="0.7in"/>
<fo:region-end fo:region-name="xsl-region-end" fo:extent="0.7in"/>
</fo:simple-page-master>

<!--This complex master page selects a Letter Page for the first page and the A4 page for the rest of the pages  -->
<fo:page-sequence-master fo:master-name="ComplexMaster1">
<fo:repeatable-page-master-alternatives fo:maximum-repeats="no-limit">
<fo:conditional-page-master-reference fo:master-reference="Letter Page" fo:page-position="first"/>
<fo:conditional-page-master-reference fo:master-reference="A4"/>
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
person this-Me    schedule 09.12.2010