如何使用PDFBox从HTML创建PDF文件?

20

我正在尝试从HTML内容创建PDF。

public byte[] generatePdf(final XhtmlPDFGenerationRequest request) {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PDDocument document = new PDDocument();
    InputStream stream = new ByteArrayInputStream(request.getContent()
            .getBytes());

    PDStream pdstream = new PDStream(document, stream);
    document.save(baos);
    document.close();
    return this.toByteArray(baos);

}
当我将这个byte[]保存到文件中时,文件是空白的。我正在使用PDStream将输入流嵌入文档中。
来自http://pdfbox.apache.org/apidocs/
public PDStream(PDDocument doc,
                InputStream str)
         throws IOException

读取输入流中的所有数据并将其嵌入文档中,这将关闭 InputStream


我正在寻找一种将HTML转换为PDF的渲染器。我们之前使用的是iText。我希望能够使用Apache PDFBox实现相同的功能,但看起来这是不可能的。我要么可以使用Apache FOP,要么继续使用iText。如果有人感兴趣,这里是iText的解决方案: https://dev59.com/dm3Xa4cB1Zd3GeqPc0eI#19792259如果您正在寻找使用PDF box合并文件的解决方案,这里是一个使用Apache pdfbox合并pdf文件的方法 - vsingh
5个回答

15

我正在寻找一个HTML转PDF的渲染器。我们使用了iText,我尝试用Apache PDFBox来实现同样的功能,但似乎无法完成。

我可以使用Apache FOP或继续使用iText。

以下是iText解决方案,如果有人感兴趣:Java渲染XML文件为PDF

如果你正在寻找使用PDF Box合并文件的解决方案,这里是它:使用Apache pdf box合并pdf文件


5
我正在寻找iText的替代品,因其许可协议与闭源项目不兼容。请帮我翻译。 - Hoffmann
@Hoffman,上面链接中的Apache PDF解决方案对您无效吗? - vsingh
3
Apache PDFBox不支持HTML转PDF。最近Slashdot上有关于Java PDF库的讨论,我发现了使用iText v2(LGPL许可证)的Flying Saucer,尚未测试过,但我会保留此处的讨论以供参考:http://ask.slashdot.org/comments.pl?sid=5505091&cid=47625223 - Hoffmann
7
OpenHTMLtoPDF是FlyingSaucer的分支,使用PDFBOX。https://github.com/danfickle/openhtmltopdf - Daniel F

9

Open HTML to PDF 库在底层使用了 PDFBox,同时隐藏了所有的转换复杂性。

使用起来相当简单:

try (OutputStream os = new FileOutputStream("/Users/me/output.pdf")) {
    PdfRendererBuilder builder = new PdfRendererBuilder();
    builder.withUri("file:////Users/me/input.html");
    builder.toStream(os);
    builder.run();
}

2
到了2023年,很奇怪的是用“PDFBox html to pdf Java example”无法快速谷歌到任何内容,并且PDFBox示例只是空的,所以我猜测大多数开发者不直接使用Apache PDFBox
相反,有示例可以使用 openhtml API来使用PDFBox。
或者

使用OpenPDF(例如1, 2)作为替代flyingsaucer API,其中OpenPDF是完全开放的iText延续。


我尝试了ApachePDFBox并且很喜欢它,但是它没有解决我们所有的问题。我不确定PDFBox是否支持Google Noto字体。 - vsingh

2

2

只是想要在2023年为其他找到这个问题的人添加/警告,openhtmltopdf目前的维护者联系不上,尽管有些人似乎在维护一个分支(参见this issue!),而飞碟也没有被维护(参见this discussionthis one在Google群组中)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接