2011-05-21 117 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