我有一个应用程序,可以使用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;
}