Docx4J docx转换为html仅在服务器上缺少内嵌图像

时间:2019-04-02 15:15:33

标签: html image tomcat8 docx docx4j

我在使用docx4j将docx转换为HTML时遇到问题。 当将该程序作为java-app运行时,所有图像都将作为内联base64包含在HTML中。从Tomcat上的servlet运行相同的转换器类时,所有图像都会丢失(甚至没有img标签)。我已经从服务器根目录中删除了docx4j.properties(java-app没有任何内容),但这没有任何效果。当我将WordprocessingMLPackage转换为PDF时-PDF包含图像-因此使用不同的输入流似乎没有问题。

任何提示在哪里看都不错。 下面的源是从docx4j剥离的示例。

public class HtmlFromDocx
{
    public static String convertDOCXToXHTML(byte[] docBytes) throws Exception
    {
        WordprocessingMLPackage wordMLPackage;
        wordMLPackage = Docx4J.load(new ByteArrayInputStream(docBytes));
        HTMLSettings htmlSettings = Docx4J.createHTMLSettings();
        htmlSettings.setImageDirPath("");
        htmlSettings.setWmlPackage(wordMLPackage);
        Docx4jProperties.setProperty("docx4j.Convert.Out.HTML.OutputMethodXML", true);
        OutputStream os = new ByteArrayOutputStream();
        Docx4J.toHTML(htmlSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
        htmlSettings = null;
        wordMLPackage = null;
        String html = os.toString();
        CreatorUC.writeFile("c:/temp/naked.html", html.getBytes());
        return html;
    }
}

编辑: 在服务器上进行测试的最简单方法是将以下代码放入servlet.init()方法中(当然,它也适用于app的main):

init()
{
 ....
 try {
    String file = "sampleWithImage.docx";
    URL url = getClass().getResource("/" + file);
    byte[] docBytes = IOUtils.toByteArray(url.openStream());  //Apache-IO
    String html = HtmlFromDocx.convertDOCXToXHTML(docBytes);
    }
    catch(Exception e) { e.printStackTrace();}
}

0 个答案:

没有答案