XSL 转换后在 PDF 中保留空白

Posted

技术标签:

【中文标题】XSL 转换后在 PDF 中保留空白【英文标题】:Preserving whitespace in PDF after XSL transform 【发布时间】:2012-05-06 10:19:40 【问题描述】:

我正在使用 XSL 转换将 XML 转换为 PDF。不幸的是,它没有保留 XML 中的空格。例如:

我想转换这个:

Test Line Data         : 0xAA

从 XML 到 PDF。它在 XML 中看起来很好,它在 Data 和 : 之间有 9 个空格,但在 PDF 中它显示了

Test Line Data : 0xAA

这是我目前所做的。将数据写入 XML 后,我将执行以下操作:

XPathDocument xPathDocDiag = new XPathDocument(this.FileNameDiagXml);
XslCompiledTransform xslTransDiag = new XslCompiledTransform();
XmlTextWriter xmlWriterDiag = new XmlTextWriter(outputFO, System.Text.Encoding.UTF8);
xslTransDiag.Transform(xPathDocDiag, null, xmlWriterDiag);
xmlWriterDiag.Flush();
xmlWriterDiag.Close();

然后启动 Apache FOP 将 FO 转换为 PDF。就像我说的,不幸的是,当我需要它时,空白并没有被保留。我尝试在 XML 中手动添加 来代替空格(查找和替换),这在转换后确实有效,但众所周知,文字 & 不能在 XML 中,因此该选项不可用。我尝试过使用 XmlReader,然后使用

<xsl:preserve-space elements="*"/>

但同样,这也不起作用(没有错误或任何东西,只是不起作用)。 XSL 部分如下所示:

<xsl:when test="Data != ''">
                <fo:table-cell text-align="left">
                    <fo:block />
                </fo:table-cell>
                <fo:table-cell text-align="left" number-columns-spanned="7">
                    <fo:block font-family="Courier New, Courier, monospace" font-size="9pt"><xsl:value-of select="Data" /></fo:block>
                </fo:table-cell>
            </xsl:when>

我尝试了各种属性修改无济于事。我在这里遗漏了一些明显的东西吗?

【问题讨论】:

【参考方案1】:

将属性white-space="pre" 添加到您想要保留空白的fo:block 中。

例子:

<fo:block white-space="pre">Test Line Data         : 0xAA</fo:block>

white-space-treatment="preserve" 属性应该也可以,但是当我在 FOP 中尝试时,它没有。

white-space-collapse="false" 属性也有效。

【讨论】:

white-space="pre" 不起作用。 white-space-treatment="preserve" 也不起作用。 white-space-collapse="false" 是唯一这样做的。谢谢。 @dangerisgo - 很高兴你成功了。您使用的是什么版本的 FOP? (只是好奇。) @dangerisgo - 啊。我使用 .95 和 1.0 进行了测试。【参考方案2】:

你可以在后面加空格

<fo:block space-after=7mm>Your te</fo-block>

【讨论】:

【参考方案3】:

您可以在 fo 块标签中使用 space-after=5mm。示例

<fo:block space-after=5mm>Something</fo-block>
<fo:block>SomethingSomething</fo:block>

第一行将在文本“Something”之后创建 5 毫米的空间。

【讨论】:

【参考方案4】:

我找到了答案。 http://groups.yahoo.com/group/XSL-FO/message/4128 当我将 white-space-collapse="false" 放入 fo:block 时,空白被保留。

【讨论】:

以上是关于XSL 转换后在 PDF 中保留空白的主要内容,如果未能解决你的问题,请参考以下文章

IE - 如何在 textarea 中保留空白,使用 javascript 字符串输入

pdfbox / XSL + FOP 转换 PDF文档

pdfbox / XSL + FOP 转换 PDF文档

如何将带有嵌入图像的 XHTML+CSS 转换为 XSL-FO?

XSL/FO:在“fo:block”上遇到无效属性:在将 html 转换为 PDF (xhmtml2fo) 时显示(没有可用的上下文信息)

谁能帮我把XML文件转换为XSD和XSL文件?