使用 Java 生成 Html 到 PDF

问题描述 投票:0回答:3

在我们的项目中,我们有一个从 HTML 内容生成 PDF 的任务。为此,我们尝试使用 flying Sacer 和 openhtmltoppdf,但是,我们尝试生成的 HTML 内容包含 CSS3 语法,并且似乎这两个库对 CSS3 的支持都很差。因此,生成的 PDF 不完整且缺少正确的布局。 我的问题是,是否有任何方法可以生成与 Java 中的 Web 视图相同的正确 PDF?

这是代码片段:

var document = Jsoup.connect(url).get();

try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
    PdfRendererBuilder builder = new PdfRendererBuilder();
    builder.withUri(uri);
    builder.toStream(outputStream);
    builder.withW3cDocument(new W3CDom().fromJsoup(document), "/");
    builder.run();

    return outputStream.toByteArray();
}

我们还尝试将所有 CSS 代码附加到 HTML 文档中,因为原始 HTML 文档包含对静态 CSS 页面的外部引用。这是片段:

for (Element link : document.select("link[rel=stylesheet]")) {
    String cssFilename = link.attr("href");

    Element style = new Element(Tag.valueOf("style"), "");
    var css = Jsoup.connect(baseUrl + cssFilename).get().body().text();

    style.appendText(css);
    link.replaceWith(style);
}
java pdf-generation openhtmltopdf
3个回答
1
投票

我们做了类似的事情,但是对于Python,我们使用了wkhtmltopdf。它对 CSS 的支持也很差。但是当我们使用内联css时。生成的 pdf 遵循正确的格式。您可以尝试使用内联CSS。不确定是否有帮助。但这对我们有帮助。


1
投票

您可以尝试Chrome Headless print

命令:

google-chrome --headless --disable-gpu --print-to-pdf='/root/test/test.pdf' /root/test/test.html


1
投票

您可以尝试适用于 Java 的 Spire.PDF。它提供了使用内联 CSS 将 HTML 渲染为 PDF 的功能。如果您使用外部 CSS,则需要将其转换为内联 CSS,以确保在 PDF 文档中正确呈现。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.