我在使用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();}
}