在我们的项目中,我们有一个从 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);
}
我们做了类似的事情,但是对于Python,我们使用了wkhtmltopdf。它对 CSS 的支持也很差。但是当我们使用内联css时。生成的 pdf 遵循正确的格式。您可以尝试使用内联CSS。不确定是否有帮助。但这对我们有帮助。
您可以尝试Chrome Headless print
命令:
google-chrome --headless --disable-gpu --print-to-pdf='/root/test/test.pdf' /root/test/test.html
您可以尝试适用于 Java 的 Spire.PDF。它提供了使用内联 CSS 将 HTML 渲染为 PDF 的功能。如果您使用外部 CSS,则需要将其转换为内联 CSS,以确保在 PDF 文档中正确呈现。