java - 从 HTML 转换为 DocX 时如何处理特殊字符

标签 java html docx docx4j

我有一个使用 DocX4J 将 html 文件转换为 DocX 的应用程序。 我在使用 ç、á、é、í、ã 等特殊字符时遇到问题。 我的 html 文件中的文本字体是 Arial,但是当我将它们转换为 DocX 时,前面提到的特殊字符被设置为 calibri 字体。因此,在同一个单词(例如 Cláudio)中,我用 Arial 字体写了“Cl”,用 Calibri 字体写了“á”字符,用 Arial 字体写了“udio”。

我发现也许我必须在 w:r 中设置字体属性,但我很难了解如何对所有已转换的文本运行执行此操作。另外,我看不到如何在下面列出的转换代码中执行此操作(带有示例 html)。

任何有关如何进行此转换并处理这些特殊字符的提示或建议都非常好。

干杯。

public WordprocessingMLPackage export(String xhtml) {

WordprocessingMLPackage wordMLPackage = null;
try {
    wordMLPackage = WordprocessingMLPackage.createPackage();
    XHTMLImporter importer = new XHTMLImporterImpl(wordMLPackage);
    List<Object> content = importer.convert(xhtml,null);
    wordMLPackage.getMainDocumentPart().getContent().addAll(content);
}
catch (Docx4JException e) {
    // ...
}
return wordMLPackage;
}
<小时/>
<html>
<head>
<meta charset="ISO-8859-1" />
<style type="text/css">
h1 {
    page-break-before: always;
}

p, h1 {
    font-family: Arial;
    font-size: 12pt;
}

p {
    line-height: 150%;
}

h1 {
    font-weight: bold;
    line-height: 130%
}
</style>
</head>
<body>
    <h1>RESUMO<br /></h1>
<p>
    <span>Um resumo para o relatório.</span><br />
</p>
</body>
</html>

最佳答案

按照 JasonPlutext 给出的提示,我在 DocX4J 论坛 ( http://www.docx4java.org/forums/docx-java-f6/docx-to-html-and-back-to-docx-t1913.html ) 上找到了如何将字体映射到 XHTMLImporter 的示例。

现在我的代码可以运行了! 请参阅下面的最终版本。

<小时/>
public WordprocessingMLPackage export(String xhtml) {

WordprocessingMLPackage wordMLPackage = null;
try {
    RFonts arialRFonts = Context.getWmlObjectFactory().createRFonts();
    arialRFonts.setAscii("Arial");
    arialRFonts.setHAnsi("Arial");
    XHTMLImporterImpl.addFontMapping("Arial", arialRFonts);

    wordMLPackage = WordprocessingMLPackage.createPackage();
    XHTMLImporter importer = new XHTMLImporterImpl(wordMLPackage);
    List<Object> content = importer.convert(xhtml,null);
    wordMLPackage.getMainDocumentPart().getContent().addAll(content);
}
catch (Docx4JException e) {
    // ...
}
return wordMLPackage;
}

关于java - 从 HTML 转换为 DocX 时如何处理特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29607496/

相关文章:

java - Maven 错误 : Could not find or load main class (pom. xml 文件)

javascript - 自定义事件和postMessage的区别

java - 使用 JTextfield 文本重复搜索 JTable

java - 如何获取以毫秒为单位的格式化日期?

javascript - html2canvas 离屏

html - 使用 libreoffice 将 HTML 转换为 DOCX 时丢失上标标签

python - 如果某行包含特殊字符,如何以不同的名称保存文档?

java - 是否有任何允许合并 docx 文件的 java 库(也许是 poi?)?

java - 合并时如何避免 hsqldb 中的 OOM?

javascript - Canvas 问题