Docx4J docx to html Отсутствие встроенных изображений только на сервере - PullRequest
0 голосов
/ 02 апреля 2019

У меня проблема с преобразованием 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();}
}
...