XSLT 中的变化或条件静态内容

发布于 2024-10-06 14:50:27 字数 360 浏览 0 评论 0原文

我有一个关于为页面生成不同的静态内容的问题, 基于页码。即我需要第一页使用不同的页眉格式,后续页面需要完全不同的格式。

我使用了fo:conditional-page-master-reference在两个单独的母版页之间进行选择。但我无法指定该母版页中存在的静态内容的条件。即根据定义的静态内容适用于我的所有页面(这不是我想要的)

我的问题是:

是否可以描述这种交替或条件 静态内容与 XSL 页面模型 (simple-page-master)。

问候, 斯里瓦察

I have a question about producing varying static content for pages,
based on page number. i.e I need a different page header format for the first page and an entire different format for the subsequent pages.

I have made use of fo:conditional-page-master-reference to select amongst two separate master pages. But i'm unable to specify the conditions for the static content present in that master page. i.e the static content by definition applies to all my pages (which is not what i desire)

My question is:

Is it possible to describe such alternating or conditional
static-content with the XSL page model (simple-page-master).

Regards,
Srivatsa

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

迷荒 2024-10-13 14:50:27

当您在 fo:page-sequence 中输出时,您可以修改 fo:static-content。通过使用 fo:markerfo: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>

您也可以直接设置 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>

You can modify your fo:static-content when you output it in your fo:page-sequence. By using fo:marker and fo:retrieve-marker, you can have the static-content set based on info contained on a particular page. For example, anytime you encountered a revdate attribute you could output an fo:marker. You would retrieve the value of that marker in your fo:static-content.

Example of fo:marker:

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

Example of 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>

You can also set static-content directly. This content would apply to all pages in that page-sequence. (The content would/could change for each page-sequence.) For example, you could output a prefix before the page-number if the attribute chapnbr was equal to 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>
胡渣熟男 2024-10-13 14:50:27

干得好 ....

<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>

Here you go ....

<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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文