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

时间:2015-04-13 14:12:16

标签: java html docx docx4j

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

我看到也许我必须在w:r中设置font属性,但我很难看到如何对我的文本的所有运行进行转换。此外,我无法在转换代码中看到如何执行此操作,如下所示(使用示例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>

1 个答案:

答案 0 :(得分:1)

根据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;
}