在XSL转换后保留PDF中的空格

时间:2012-04-25 17:19:05

标签: xml xsl-fo

我正在使用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>

我尝试了各种属性修改无济于事。我错过了一些明显的东西吗?

4 个答案:

答案 0 :(得分:13)

将属性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"也有效。

答案 1 :(得分:2)

我找到了答案。 http://groups.yahoo.com/group/XSL-FO/message/4128当我在fo:block中放置white-space-collapse =“false”时,会保留空格。

答案 2 :(得分:1)

你可以在fo block标签中使用space-after = 5mm。实施例

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

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

答案 3 :(得分:0)

您可以在

之后添加空格
<fo:block space-after=7mm>Your te</fo-block>