Docx4j java.lang.UnsupportedOperationException: отсутствует ImageHandler для изображения при преобразовании из docx в pdf

Я использую Docx4j, чтобы сначала создать файл.docx (работает как задумано), а затем преобразовать файл docx в pdf, используя Docx4j.toFO(). Файл содержит изображения и выдает эту трассировку стека при выполнении.

org.docx4j.openpackaging.exceptions.Docx4JException: Exception exporting package
    at org.docx4j.convert.out.common.AbstractExporter.export(AbstractExporter.java:97) ~[docx4j-3.1.0.jar:na]
    at org.docx4j.Docx4J.toFO(Docx4J.java:475) ~[docx4j-3.1.0.jar:na]

...

Caused by: java.lang.UnsupportedOperationException: No ImageHandler available for image: file:/usr/tomcat/apache-tomcat-7.0.62/temp/df7fc224-b424-4083-9b85-45032b5ff6e5image1.png (image/png) (org.apache.xmlgraphics.image.loader.impl.ImageRawStream)
    at org.apache.fop.render.intermediate.AbstractIFPainter.drawImage(AbstractIFPainter.java:218) ~[fop-1.0.jar:na]

Соответствующие записи POM.xml:

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>3.2.2</version>
    <scope>provided</scope> 
</dependency>

<dependency>
    <groupId>xalan</groupId>
    <artifactId>xalan</artifactId>
    <version>2.7.2</version>
</dependency>

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>2.1</version>
</dependency>

Код:

FOSettings foSettings = Docx4J.createFOSettings();

String outputfilepath = System.getProperty("java.io.tmpdir") + "/form.pdf";         

OutputStream os = new java.io.FileOutputStream(outputfilepath);

foSettings.setWmlPackage(wordMLPackage);

if (foSettings.getImageHandler() == null) {
    logz.debug("Image handler is null");
    foSettings.setImageHandler(foSettings.getImageDirPath() != null ? 
            new FOConversionImageHandler(foSettings.getImageDirPath(), true) : 
            new FOConversionImageHandler());
}

Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);

1 ответ

В настоящее время docx4j использует FOP 1.1. (Мы можем сделать так, чтобы в предстоящем новом docx4j 3.3.0 новом отдельном проекте docx4j-export-fo использовались более свежие FOP в ближайшие дни)

Так что FOP 1.1 должен работать. В противном случае, похоже, что вам нужно настроить обработчик изображения для PNG. Может относиться к вашей банке xmlgraphics-commons?

Другие вопросы по тегам