Я использую библиотеку открытьhtmlвpdf для преобразования моих HTML-шаблонов в PDF:
try (OutputStream os = new FileOutputStream(filePath);
PDDocument doc = new PDDocument()) {
for (String html : htmlPagesWithValues) {
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.defaultTextDirection(BaseRendererBuilder.TextDirection.LTR);
builder.useDefaultPageSize(210, 297, BaseRendererBuilder.PageSizeUnits.MM);
builder.useProtocolsStreamImplementation(new InternalFSStreamFactory(), "localProtocol");
builder.withHtmlContent(html, "");
builder.useSVGDrawer(new BatikSVGDrawer());
builder.usePDDocument(doc);
PdfBoxRenderer renderer = builder.buildPdfRenderer();
renderer.createPDFWithoutClosing();
}
doc.save(os);
} catch (Exception ex) {
log.debug("Stacktrace: ", ex);
}
Во время создания файла PDF я получаю следующую трассировку стека:
java.lang.NullPointerException: null at com.openhtmltopdf.pdfboxout.PdfBoxTextRenderer.getWidth(PdfBoxTextRenderer.java:300) at com.openhtmltopdf.layout.Breaker.doBreakText(Breaker.java:147) at com.openhtmltopdf.layout.Breaker.doBreakText(Breaker.java:115) at com.openhtmltopdf.layout.Breaker.breakText(Breaker.java:109) at com.openhtmltopdf.layout.InlineBoxing.layoutText(InlineBoxing.java:959)
...
🤔 А знаете ли вы, что...
Java используется в большом количестве крупных корпоративных приложений и систем.
Я нашел проблему. Я использую изображения в файле PDF, размещенном на нашем сервере. Библиотека открытьpdftohtml пыталась получить доступ к изображениям по нашему общедоступному URL-адресу, но этот URL-адрес был недоступен. После добавления доступа PDF успешно создан. Я также открыл вопрос на Github: https://github.com/danfickle/openhtmltopdf/issues/267