我有一个 XSLT 样式表,可将 XML 数据转换为 XSL-FO(然后使用 Apache FOP 将其呈现为 PDF)。
现在,我需要将输出本地化为几种不同的语言。例如,XSLT 生成的表的列标题需要本地化。下面是生成带有列标题“Date”、“Name”和“Something”的表标题的 XSLT 的简化片段:
...
<fo:table>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
<fo:block>Date</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Name</fo:block>
</fo:table-cell>
<fo:table-cell>
</fo:block>Something</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-header>
</fo:table-body>
<xsl:apply-templates select="item"/>
</fo:table-body>
</fo:table>
...
Run Code Online (Sandbox Code Playgroud)
我们已经在系统的其他部分使用TMX文件进行国际化,因此这似乎是一种自然的方法。下面是一个 TMX 文件的简化示例,其中包含两个语言的几个字符串:
<tmx version="1.4b">
<body>
<tu tuid="DATE">
<tuv xml:lang="en"><seg>Date</seg></tuv>
<tuv xml:lang="sv"><seg>Datum</seg></tuv>
</tu>
<tu tuid="NAME">
<tuv xml:lang="en"><seg>Name</seg></tuv>
<tuv xml:lang="sv"><seg>Namn</seg></tuv>
</tu>
</body>
</tmx>
Run Code Online (Sandbox Code Playgroud)
因此,基本上我想用 TMX 文件中的字符串引用(使用tuid属性)替换 XSLT 中的硬编码列标题,以便相同的 XSLT 可以生成不同语言的输出。
但我似乎找不到任何有关如何将 TMX 文件与 XSLT 结合使用的资源。示例或指向一些好的教程的指针将不胜感激。
我正在尝试使用 Apache FOP 从使用 xlst 样式表格式化的 xml 文件创建 PDF 文档,以将原始 xml 文件转换为 xml-fo 格式的 xml 文件。由于我是新手,我尝试创建一个简单的 hello world 示例,但没有成功。
生成过程似乎成功(无例外),但生成的 pdf 文件由于某种原因无效。该文件大小为4.8KB,使用libreoffice writer打开时,数据肯定已写入该文件,但该文件无法在pdf阅读器中打开。
XML 文件相当简单:
<rentalRequest>
<firstName>foo</firstName>
<lastName>bar</lastName>
<email>foo@bar.com</email>
<street>foo street</street>
<houseNo>42</houseNo>
<postalCode>4242</postalCode>
<city>bar city</city>
</rentalRequest>
Run Code Online (Sandbox Code Playgroud)
XSL 文件,只是尝试打印 Hello World!:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes" />
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="all">
<fo:region-body />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="all">
<fo:flow flow-name="xsl-region-body">
<fo:block>
Hello World!
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
使用JAXP + FOP生成pdf文件的java代码:
<rentalRequest>
<firstName>foo</firstName> …Run Code Online (Sandbox Code Playgroud) 我对 XSLT 还很陌生,我遇到了一个问题,我有一个包含未知数量的孩子的元素,我需要在表格中显示这些孩子,以便有 5-6 列可用于显示信息。
如果我得到一个如下所示的 XML 文件:
<books>
<book>
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
</book>
<book>
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
</book>
<book>
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
</book>
<book>
<author>Randall, Cynthia</author>
<title>Lover Birds</title>
</book>
<book>
<author>Thurman, Paula</author>
<title>Splish Splash</title>
</book>
<book>
<author>Knorr, Stefan</author>
<title>Creepy Crawlies</title>
</book>
<book>
<author>Kress, Peter</author>
<title>Paradox Lost</title>
</book>
<book>
<author>Crichton, Michael</author>
<title>Jurassic Park</title>
</book>
<book>
<author>Orwell, George</author>
<title>1984</title>
</book>
<book>
<author>Martin, George</author>
<title>A Song of Ice And Fire</title>
</book>
</books>
Run Code Online (Sandbox Code Playgroud)
我想在一个由两行五列组成的表格中显示这 10 本书。
我已经走了这么远:
<xsl:template match="books" mode="table"> …Run Code Online (Sandbox Code Playgroud) 我正在尝试水平对齐内联容器,但找不到相应的 FO 属性,例如用于垂直对齐的 display-align 。
这是一些没有任何对齐的示例代码:
<fo:inline-container background-color="white" border-style="solid" border-width="2mm" border-color="white">
<fo:block font-family="Blablabla" text-align="center" font-size="54pt" space-after="6mm" text-indent="0mm" last-line-end-indent="0mm" alignment-baseline="central">
...
</fo:block>
</fo:inline-container>
Run Code Online (Sandbox Code Playgroud)
整个事情将使用 AntennaHouse 5.2 进行处理。
预先感谢斯塔夫罗斯
我正在使用 xsl fo 和 Java 从 XML 生成 PDF。我需要在我的 6 列表的一列中嵌入一个超链接。这是我的代码片段。
<fo:table-row>
<xsl:for-each select="./clientMain/hierarchy/link">
<fo:table-cell border="solid 1px black" text-align="left" font-size="10pt"><fo:block>Hierarchy</fo:block></fo:table-cell>
<fo:table-cell border="solid 1px black" text-align="left" font-size="9pt">
<fo:block><a>
<xsl:attribute name="href"><xsl:value-of select="@link"/></xsl:attribute>
</a></fo:block>
<fo:block><xsl:value-of select="@link"/></fo:block></fo:table-cell>
</xsl:for-each>
</fo:table-row>
Run Code Online (Sandbox Code Playgroud)
但我的程序失败并出现此错误:
javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: "fo:table-row" is missing child elements. Required content model: (table-cell+) (No context info available)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:718)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:682)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336)
at org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:682)
at org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2336)
Run Code Online (Sandbox Code Playgroud)
如果我评论这一行,一切正常。请帮忙 !!!!
是否有任何应用程序从XML文件生成XSL样式表?我有一个非常复杂的XML文件,它是一个结构良好的SVG文件.
有没有将XML转换为XSL的软件应用程序?
我正在使用xsl-fo并尝试在 <sup>
例如,我想使2为上标。
<sup id="FNB-0002"><xref href="#Comp_CLJONLINE_CLJ_2010_04_2/FN-0002">2</xref></sup>
我正在使用以下代码,我认为应该可以。
<xsl:template match="sup[@id='*']">
<fo:inline font-size="24pt" font-weight="bold" text-indent="2em" text-transform="uppercase" >
<xsl:apply-templates/>
</fo:inline>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但是我所应用的样式均未得到认可。我开始认为这是因为2位于外部参照中,而xsl-fo则忽略了它。
谁能给我一些指导,以迎合这些风格和风格
谢谢,
假设我有一个带有桌子的块:
<fo:block>
<fo:table page-break-inside="avoid">
...
</fo:table>
<fo:table page-break-inside="avoid">
...
</fo:table>
...
</fo:block>
Run Code Online (Sandbox Code Playgroud)
有没有办法在块中断时绘制线条或在块上放置边框底部?
见下图(红线是我需要和缺失的).
我正在使用Apache FOP.
任何帮助将不胜感激.