У меня проблема с преобразованием docx в HTML с помощью docx4j.При запуске программы в виде java-приложения все изображения будут включены в HTML как встроенные base64.При запуске одного и того же класса конвертера из сервлета на tomcat все изображения теряются (даже нет 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 () (конечно, он также вписывается в 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();}
}