gpt4 book ai didi

xhtml - docx4j XHTMLImporter 忽略  (不间断空格)

转载 作者:行者123 更新时间:2023-12-02 14:23:25 27 4
gpt4 key购买 nike

docx4j 中的 XHTMLImporter 不会将   转换为 MS WORD 不间断空格。

使用以下代码:

public void convert() throws Exception {



String stringFromFile = FileUtils.readFileToString(new File("tmp.xhtml"), "UTF-8");

String unescaped = stringFromFile;
System.out.println("Unescaped: " + unescaped);


// Setup font mapping
RFonts rfonts = Context.getWmlObjectFactory().createRFonts();
rfonts.setAscii("Century Gothic");
XHTMLImporterImpl.addFontMapping("Century Gothic", rfonts);

// Create an empty docx package
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();

// Convert the XHTML, and add it into the empty docx we made
XHTMLImporter XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
XHTMLImporter.setHyperlinkStyle("Hyperlink");

wordMLPackage.getMainDocumentPart().getContent().addAll(
XHTMLImporter.convert(unescaped, null) );

System.out.println(
XmlUtils.marshaltoString(wordMLPackage.getMainDocumentPart().getJaxbElement(), true, true));

wordMLPackage.save(new java.io.File("OUT_from_XHTML.docx") );

}

当 XHTML 输入如下时:

<p style="LINE-HEIGHT: 120%; MARGIN: 0in 0in 0pt"
class="MsoNormal"><span
style="LINE-HEIGHT: 120%; FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'">Up
to Age 30<span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
2.30<span
style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
3.30</span></p>

那么 docx 输出如下:

<w:r>
<w:rPr>
<w:rFonts w:ascii="Courier New"/>
<w:b w:val="false"/>
<w:i w:val="false"/>
<w:color w:val="000000"/>
<w:sz w:val="20"/>
</w:rPr>
<w:t>
2.30</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:ascii="Courier New"/>
<w:b w:val="false"/>
<w:i w:val="false"/>
<w:color w:val="000000"/>
<w:sz w:val="20"/>
</w:rPr>
<w:t>
3.30</w:t>
</w:r>

在 Word 2013 中打开文档时,根本没有空格。

最佳答案

我没有深入研究 docx4j 源代码,只是调用

String escaped = unescaped.replace("&nbsp;", "\u00A0");

不幸的是,在Word文档中它变成了平常的空间,但对我来说并不重要。

关于xhtml - docx4j XHTMLImporter 忽略 &nbsp(不间断空格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33780103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com