我正在使用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>
我尝试了各种属性修改无济于事。我错过了一些明显的东西吗?
答案 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>