如何使用POI或docx4j将HTML文本写入Microsoft Word文档?

时间:2017-05-30 03:40:51

标签: java html docx4j

我正在使用docx4j来创建Microsoft Word文档。我还需要将html文本写入doc。下面是我正在使用的代码,生成doc文件时,它全部为空。

import org.docx4j.dml.ObjectFactory;
import org.docx4j.jaxb.Context;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.AltChunkType;

public class AltChunkAddOfTypeHtml {

    static String DEST = "/home/Downloads/Sample.docx";

    private static org.docx4j.wml.ObjectFactory factory;

    public static void main(String[] args) throws Exception {

        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage
                .createPackage();

        String html =  "<html>पासवर्ड</html>";

        wordMLPackage.getMainDocumentPart().addAltChunk(AltChunkType.Html,
                html.getBytes());

        wordMLPackage.save(new java.io.File(DEST));
    }

}

编辑1:

以下是正常运行的代码。现在唯一的问题是正确设置字体。当我在HTML中设置字体如下

<table border="1px" width="70%" style="font-size: 9px;">

鉴于字体大小仅适用于英文文本。它不适用于马拉地语文本。

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.docx4j.XmlUtils;
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

public class ConvertInXHTMLFragment {

    static String SRC = "/home/Downloads/Input.html";
    static String DEST = "/home/Downloads/Sample.docx";

    public static void main(String[] args) throws Exception {

        String stringFromFile =  "<html>पासवर्ड</html>";
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

        XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);

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

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

        wordMLPackage.save(new java.io.File(DEST));
    }

}

1 个答案:

答案 0 :(得分:0)

AltChunk依赖于消费应用程序的支持(即消费应用程序转换HTML有效负载)。

您的输出docx适用于Microsoft Word(2010年测试)。

如果您希望在保存之前将XHTML转换为真实的docx内容,那么您可以在更广泛的消费应用程序中查看您的内容,请参阅https://github.com/plutext/docx4j-ImportXHTML/tree/master/src/samples/java/org/docx4j/samples

更新 - FONTS

字体由https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/main/java/org/docx4j/convert/in/xhtml/FontHandler.java#L58

处理

Marathi可能依赖于RFonts对象中的其他属性之一。您需要查看正在运行的docx才能看到。您可以使用https://github.com/plutext/docx4j-ImportXHTML/blob/master/src/main/java/org/docx4j/convert/in/xhtml/FontHandler.java#L54注入合适的字体映射。