XSLT新行未被保留

时间:2016-04-22 19:49:35

标签: pdf xslt xsl-fo apache-fop

出于某种原因,我的空格在xslt之后不会保存在我的最终PDF中。我想要的输出是:

静态

文字粗体。

这是我的xslt模板:

col-md-10

1 个答案:

答案 0 :(得分:2)

我认为您的XSLT存在一些问题:

  1. 无需将文本括在xsl:text元素中,因为这些文本节点不仅仅由空格字符组成,因此永远不会被剥离(请参阅Whitespace stripping更多详情)
  2. 出于同样的原因,无需使用xsl:preserve-spacexsl:strip-space ,除非您出于其他原因需要它们
  3. 在从XML到XSL-FO的转换中保留换行只是(必需的)第一步,但是在处理XSL-FO文件时必须保留它们;为此,您必须使用linefeed-treatment属性linefeed-treatment="preserve"
  4. 文字换行相当于
实体,因此在您的输入中,您在"静态"之间有 3换行和" text",保留时会产生两个空行;如果那不是你想要的,你必须删除其中一些
  5. 单词" text"和"大胆"在两个不同的fo:block元素内,所以这意味着它们总是在不同的行上;如果您希望将它们放在另一个旁边,这些字必须位于fo:inline元素内(并且必须有一个外部fo:block来包含它们)
  6. 最后一句警告

    在查看FO文件时,保留的换行符与被忽略的换行符之间的差异不会立即显现,因为它归结为祖先元素中存在linefeed-treatment属性(可能离文本节点本身很远)。

    在特定位置强制换行的更清晰的方法包括:

    • 使用不同的fo:block元素,每个元素都包含应该创建一行(或几行)的文本
        <fo:block>Static</fo:block>
        <fo:block>text <fo:inline font-weight="bold">bold.</fo:inline></fo:block>
    
    • 使用空格fo:block,其中换行符应为
        <fo:block>
            Static
            <fo:block/>
            text <fo:inline font-weight="bold">bold.</fo:inline>
        </fo:block>