Documents4j - ConversionInputException на Tomcat7
Я пытаюсь преобразовать загруженный файл DOCX в PDF с приложением, развернутым на Tomcat7, но каждая попытка не удалась с:
18:16:26.286 [pool-5-thread-3] INFO c.d.c.msoffice.MicrosoftWordBridge - Requested conversion from .\docTemp\880943b5-769a-4f30-bbe2-5256997e5be3\temp5 (application/vnd.com.documents4j.any-msword) to .\docTemp\880943b5-769a-4f30-bbe2-5256997e5be3\temp6 (application/pdf)
18:16:26.286 [pool-5-thread-3] DEBUG o.z.exec.ProcessExecutor - Executing [cmd, /S, /C, ""C:\Program Files\Apache Software Foundation\Tomcat 7.0\.\docTemp\word_convert1683097585.vbs" "C:\Program Files\Apache Software Foundation\Tomcat 7.0\.\docTemp\880943b5-769a-4f30-bbe2-5256997e5be3\temp5" "C:\Program Files\Apache Software Foundation\Tomcat 7.0\.\docTemp\880943b5-769a-4f30-bbe2-5256997e5be3\temp6" "17""] in .\docTemp.
18:16:26.286 [pool-5-thread-3] DEBUG o.z.exec.ProcessExecutor - Started java.lang.ProcessImpl@63ef6686
18:16:26.333 [WaitForProcess-java.lang.ProcessImpl@63ef6686] DEBUG o.zeroturnaround.exec.WaitForProcess - java.lang.ProcessImpl@63ef6686 stopped with exit code -2
com.documents4j.throwables.ConversionInputException: The input file seems to be corrupt
at com.documents4j.util.Reaction$ConversionInputExceptionBuilder.make(Reaction.java:159)
at com.documents4j.util.Reaction$ExceptionalReaction.apply(Reaction.java:75)
at com.documents4j.conversion.ExternalConverterScriptResult.resolve(ExternalConverterScriptResult.java:70)
at com.documents4j.conversion.ProcessFutureWrapper.evaluateExitValue(ProcessFutureWrapper.java:48)
at com.documents4j.conversion.ProcessFutureWrapper.get(ProcessFutureWrapper.java:36)
at com.documents4j.conversion.ProcessFutureWrapper.get(ProcessFutureWrapper.java:11)
at com.documents4j.job.AbstractFutureWrappingPriorityFuture.run(AbstractFutureWrappingPriorityFuture.java:78)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Когда я пытаюсь преобразовать файл вручную (в консоли) с помощью тех же библиотек / классов, которые используются в веб-приложении, все работает нормально, но преобразование непосредственно в веб-приложение не выполняется. Не имеет значения, пытался ли я преобразовать входной поток напрямую или сначала сохранить файл локально, а затем преобразовать его как файл (что означает, что входной поток / документ в порядке). Я использую следующий синглтон (удален ненужный код):
public static DocumentHelper getInstance() throws IOException{
if (INSTANCE == null)
INSTANCE = new DocumentHelper();
return INSTANCE;
}
public DocumentHelper() throws IOException{
this.appProps = new Properties();
this.appProps.load(this.getClass().getClassLoader().getResourceAsStream("layer.properties"));
new File(this.appProps.getProperty(CONVERTIOR_TEMP_DIR)).mkdir();
this.converter = LocalConverter.builder()
.baseFolder(new File(this.appProps.getProperty(CONVERTIOR_TEMP_DIR)))
.workerPool(20, 25, 5, TimeUnit.SECONDS)
.processTimeout(15, TimeUnit.SECONDS)
.build();
}
public byte[] convertDocument(InputStream wordFile){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
converter.convert(wordFile).as(DocumentType.MS_WORD)
.to(baos).as(DocumentType.PDF)
.execute();
return baos.toByteArray();
}