【问题标题】:Docx4j export FO ignores standalone whitespaceDocx4j 导出 FO 忽略独立空格
【发布时间】:2022-01-14 02:28:53
【问题描述】:

我正在使用 docx4j-export-FO 11.3.2 使用此处https://github.com/plutext/docx4j-export-FO/blob/master/src/samples/docx4j/org/docx4j/samples/ConvertOutPDFviaXSLFO.java 中的示例代码将 docx 文件转换为 xsl-fo。每当 docx 存档中的 word/document.xml 中存在像 <w:t xml:space="preserve"> </w:t> 这样的独立空格时,它就会被忽略并在生成的 xsl-fo 文件中丢失。如果空格与非空格字符在相同的<w:t> 中,则包含它。 word/document.xml 中的问题情况示例:

<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
</w:rPr>
<w:t>Testing</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
</w:rPr>
<w:t xml:space="preserve"> </w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/>
</w:rPr>
<w:t>whitespace</w:t>
</w:r>

在使用 XSLT 导出器 (Docx4J.FLAG_EXPORT_PREFER_XSL) 时会发生这种情况,当使用访问者导出器 (Docx4J.FLAG_EXPORT_PREFER_NONXSL) 时会保留空白,但它会从 docx 文件中删除所有空白行,因此也不适合我,因为我需要将 xls-fo 进一步转换为 pdf。 我尝试在互联网上搜索,但找不到确切的这个问题,这是否意味着它应该以这种方式工作,或者我可以使用任何配置或解决方法来解决这个问题?

【问题讨论】:

  • 当您说“从 docx 文件中删除所有空白行”时,您能否举一个输入 WordML 的示例?
  • 更好的是,发布生成的 XSL FO 文件。只有这样,我们才能帮助调试他们的 XSL FO 导出所创建的内容

标签: xsl-fo docx4j


【解决方案1】:

您的应用程序做错了,但也许您可以修改 XSLT 来修复它。如果您可以看到 FOP 用作输入的 XSL-FO 文件,您可能会更好地了解文本是否已被删除或对其进行了其他处理。我对Docx4J一无所知,所以我不知道是否有一个配置选项可以为您解决问题。

每个 XML 应用程序都应在具有 xml:space="preserve" 的元素中保留纯空白文本节点。 (见https://www.w3.org/TR/REC-xml/#sec-white-space

XSLT 应用程序应保留纯空白文本节点,其中:

文本节点的祖先元素有一个值为preservexml:space 属性,并且没有更接近的祖先元素有一个值为默认值的xml:space

(见https://www.w3.org/TR/1999/REC-xslt-19991116#strip

因此,仅空白文本节点应位于 XSLT 转换的源文档中。如果您有权访问正在使用的样式表,请查看text()w:txsl:template 规则,看看您是否可以找出要更改的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多