如何使用XSL-FO保持格式化(保留CR-LF字符)?

时间:2011-05-21 16:29:38

标签: xsl-fo

我正在尝试将一些文本嵌入到我使用XSL-FO / xslt生成的PDF中。我的文本已正确嵌入,但删除了LineFeed和Carriage Returns,因此我的文本文件只是一个巨大的文本块。

我正在使用 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完全相同的文字,为什么?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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

此外,DOE不是强制性功能,并且在XSLT 2.0中可能仅支持向后兼容功能。尽量避免它。

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