gpt4 book ai didi

java - 通过 xslt 和 xsl 生成 pdf 时根据 pdf 的页码打印一些文本 :fo

转载 作者:行者123 更新时间:2023-12-02 01:36:03 26 4
gpt4 key购买 nike

我正在使用以下 lib/namespaces 从 xml 生成 pdf

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:math="http://exslt.org/math"
xmlns:exslt="http://exslt.org/common"
xmlns:str="http://exslt.org/strings"
exclude-result-prefixes="exslt math str">

我的要求是我想打印一些文本 fo:block-container 文本将打印在第二页上。

<fo:block-container xsl:use-attribute-sets="section border_red">
<fo:block xsl:use-attribute-sets="header">Product:</fo:block>
<xsl:for-each select="ROWSET2/ROWSET2_ROW">
<fo:block xsl:use-attribute-sets="paragraph indented"><xsl:value-of select="PRODUCTNAME"/></fo:block>
</xsl:for-each>
<!-- when page not first print something at the end of this block -->
</fo:block-container>

因此,当 block 溢出到 2ed、3ed .. 页时,在 block 内部打印,如果 block 在第一页上完成,则不需要文本打印。

Tried "fo:retrieve-table-marker"

:

                <fo:table>
<fo:table-header>
<fo:table-cell>
<fo:block xsl:use-attribute-sets="header">Product:
</fo:block>
</fo:table-cell>
</fo:table-header>

<fo:table-footer>
<fo:table-row>
<fo:table-cell>

<fo:retrieve-table-marker
retrieve-class-name="test123" retrieve-boundary-within-table="table"
retrieve-position-within-table="last-starting" />

</fo:table-cell>
</fo:table-row>
</fo:table-footer>

<fo:table-body>
<xsl:for-each select="ROWSET2/ROWSET2_ROW">
<xsl:choose>
<xsl:when test="position() != last()">
<fo:table-row>
<fo:marker marker-class-name="test123">To be continued...
</fo:marker>
<fo:table-cell>
<fo:block xsl:use-attribute-sets="paragraph indented">
<xsl:value-of select="PRODUCTNAME" />
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:when>
<xsl:otherwise>
<fo:table-row>
<fo:marker marker-class-name="test123"></fo:marker>
<fo:table-cell>
<fo:block xsl:use-attribute-sets="paragraph indented">
<xsl:value-of select="PRODUCTNAME" />
last
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</fo:table-body>
</fo:table>

最佳答案

如果您的要求是当 fo:block-container 分成多个页面时在页面末尾输出特殊文本,则 XSL 1.1 和 XSL-FO 处理器供应商的扩展中没有此类功能(据我所知)。

但是,如果您将 fo:table、fo:table-footer、fo:retrieve-table-marker 和 fo:marker 与表外规则和每一行没有规则的条目一起使用,则可能会在以下情况下输出特殊文本:表格分为多个页面。

[XSL 1.1] 6.7.7 fo:table-footer

[XSL 1.1] 6.13.7 fo:retrieve-table-marker =”

[XSL 1.1] 6.13.5 fo:marker

请参阅以下博客文章中的示例快照(日语):

テーブルのタイトルに"(Continued)"と出す. (3)

Frist Page

Second Page

Last Page

在此示例中,“继续到下一页”在 fo:table-cell 的 fo:marker 中定义,并通过 fo:retrieve-table-marker 显示在 fo:table-footer 中。

示例数据:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<ROWSET2>
<ROWSET2_ROW><PRODUCTNAME>Product1</PRODUCTNAME></ROWSET2_ROW>
<ROWSET2_ROW><PRODUCTNAME>Product2</PRODUCTNAME></ROWSET2_ROW>
...
<ROWSET2_ROW><PRODUCTNAME>Product24</PRODUCTNAME></ROWSET2_ROW>
<ROWSET2_ROW><PRODUCTNAME>Product25</PRODUCTNAME></ROWSET2_ROW>
</ROWSET2>
</ROOT>

示例代码:

<xsl:template match="ROOT">
<fo:table width="100%">
<fo:table-header>
<fo:table-cell>
<fo:block xsl:use-attribute-sets="header">Product:
</fo:block>
</fo:table-cell>
</fo:table-header>
<fo:table-footer>
<fo:table-row>
<fo:table-cell>
<fo:retrieve-table-marker
retrieve-class-name="test123"/>
</fo:table-cell>
</fo:table-row>
</fo:table-footer>
<fo:table-body>
<xsl:for-each select="ROWSET2/ROWSET2_ROW">
<fo:table-row>
<fo:table-cell>
<fo:block xsl:use-attribute-sets="paragraph indented">
<xsl:choose>
<xsl:when test="position() = 1">
<fo:marker marker-class-name="test123">
<fo:block xsl:use-attribute-sets="indented" color="teal">To be continued...</fo:block>
</fo:marker>
</xsl:when>
<xsl:when test="position() = last()">
<fo:marker marker-class-name="test123"/>
</xsl:when>
</xsl:choose>
<xsl:value-of select="PRODUCTNAME" />
<xsl:if test="position()=last()">
<fo:inline> Last</fo:inline>
</xsl:if>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</xsl:template>

示例结果:

The sample PDF

关于java - 通过 xslt 和 xsl 生成 pdf 时根据 pdf 的页码打印一些文本 :fo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55259571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com