Documents4j Remote Converter: файл PDF сгенерирован не работает, не могу открыть его - PullRequest
0 голосов
/ 18 октября 2019

Я пытался преобразовать простой файл docx в PDF с помощью этого кода:

try {
InputStream in = testXdocReportDoc.class.getResourceAsStream("testXdocReportDocV2.docx");
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Velocity);

IContext context = report.createContext();
Project project = new Project("test1", "test2", "test3", "test4", "test5");
context.put("project", project);
File tempFile = new File(f.getAbsolutePath().replace("pdf", "docx"));
OutputStream out = new FileOutputStream(tempFile);
report.process(context, out);

out.flush();
out.close();
in.close();

IConverter converter2 = RemoteConverter.builder()
        .baseFolder(new File(HistorisationDevisManager.getAbsolutePathDevisPdf(devis)))
        .workerPool(20, 25, 2, TimeUnit.SECONDS)
        .requestTimeout(10, TimeUnit.SECONDS)
        .baseUri("http://localhost:8080")
        .build();

Future<Boolean> conversion = converter2
        .convert(tempFile).as(DocumentType.DOCX)
        .to(bo).as(DocumentType.PDF)
        .prioritizeWith(1000) // optional
        .schedule();
conversion.get();

try {
    OutputStream outputStream = new FileOutputStream(f);
    bo.writeTo(outputStream);
} catch (IOException e) {
    e.printStackTrace();
}
bo.close();
}  catch (Exception e) {
e.printStackTrace();
}
}

Кажется, все работает, мой docx представляет собой простой файл с «test» внутри, но когда я пыталсяоткройте сгенерированный PDF, он сломан, как, и я не знаю, почему ...

1 Ответ

0 голосов
/ 23 октября 2019

В вашем коде куча слабых сторон, я думаю, это связано с этими ошибками. Вы открываете, но не закрываете все потоки. Кроме того, documents4j может обрабатывать ссылки на файлы, это должно быть предпочтительным. Просто напишите свой код так:

converter2        
  .convert(testXdocReportDoc.class
    .getResourceAsStream("testXdocReportDocV2.docx")).as(DocumentType.DOCX)
  .to(new File("/write/to/this/location.pdf)).as(DocumentType.PDF)
  .schedule();
...