2011-05-21 98 views
1

我试图将一些文本嵌入到使用XSL-FO/xslt生成的PDF中。我的文本被正确嵌入,但Linefeed和Carriage Returns被删除,所以我的文本文件只是一大块文本。如何使用XSL-FO保留格式(保留CR-LF字符)?

我使用unparsed-text()来获取文本文件的内容。我使用white-space-collapse =“false”尝试获取未格式化的文本。

<fo:block font-family="monospace" white-space-collapse="false" wrap-option="no-wrap"> 
    <xsl:value-of select="unparsed-text($EXTERNAL_DOCUMENT_FILENAME)" disable-output-escaping="yes"/> 
</fo:block> 

谢谢!

===========

编辑

我只是尝试这样做,我注意到输出不格式化......

<fo:block font-family="monospace" white-space-collapse="false" wrap-option="wrap"> 
    <!--<xsl:value-of select="unparsed-text($EXTERNAL_DOCUMENT_FILENAME)" />--> 
Hi this is me, 
Then this is him, 

Then I have set the value. 

    OK? 
</fo:block> 

我期待与LF和CR完全相同的文本,为什么?

回答

1

这里是我找到了答案:

<fo:block font-family="monospace" wrap-option="wrap" linefeed-treatment="preserve" white-space-collapse="false" white-space-treatment="preserve"> 
    <!--<xsl:apply-templates select="*|text()"/>--> 
    <xsl:value-of select='n1:text/text()'/> 
</fo:block> 

这工作得很好,XSL-FO被移除CR-LF。

0

请勿使用<xsl:strip-space="yes"/>

另外,DOE不是强制性功能,而XSLT 2.0可能仅支持向后兼容功能。尽量避免它。

尝试一个小文本文件,看看是否因为unparsed-text()(根本没有XSL-FO)而获得NL字符。如果存在NL字符,那么你的问题很可能只与XSL-FO相关,而不是XSLT。如果NL字符不存在,那么这表示您的XSLT处理器的实现unparsed-text()中的错误 - 请联系供应商并提交错误。

+0

NL字符在输出中。可能是一个XSL-FO问题,然后...... – 2011-05-21 18:00:45