如何使用 Java 将一个网页转成 PDF

2024-01-20 09:39:15 +08:00
linmt  linmt
目前用的是 playwright ,但是当网页有十几页的时候就很慢,有其他方法吗

1. 需要等网页加载完成之后再生成 PDF
2. 可以设置生成 PDF 的宽度
3. 可以设置每页 PDF 的高度
3017 次点击
所在节点   程序员  程序员
19 条回复
fzazhao
fzazhao
2024-01-20 10:29:53 +08:00
用 Selenium
flyqie
flyqie
2024-01-20 10:42:01 +08:00
你需要的是无头浏览器。。

并且,你要转的到底是可复制的那种还是不可复制的那种?

不可复制的话无头浏览器直接截图拼,可复制的话就得调无头导 pdf 了。
youknowiam
youknowiam
2024-01-20 10:48:47 +08:00
我用的 headless-chrome ,https://github.com/rust-headless-chrome/rust-headless-chrome ,Java 也有类似的框架。
flyqie
flyqie
2024-01-20 11:27:28 +08:00
@flyqie #2

刚才搜了下 playwright ,发现也是个无头框架,但感觉好像。。没怎么见过?
cvbnt
cvbnt
2024-01-20 11:36:04 +08:00
ironpdf ?
gouflv
gouflv
2024-01-20 14:43:50 +08:00
Playwright 的性能似乎比 Selenium 、Puppeteer 差一点
Jwyt
Jwyt
2024-01-20 14:46:19 +08:00
除了无头浏览器,还有一个 wkhtmltopdf ,但是效果应该比无头浏览器稍微差一点
linmt
linmt
2024-01-20 16:37:41 +08:00
@Jwyt 这个好像已经不更新了,不敢用
linmt
linmt
2024-01-20 16:40:30 +08:00
@gouflv 也有试过用 Selenium ,用不来,但是这个好像也是用的浏览器 driver
linmt
linmt
2024-01-20 16:41:07 +08:00
@flyqie 这个偏向于用做自动化测试
linmt
linmt
2024-01-20 16:41:55 +08:00
@youknowiam playwright 也是用的 headless-chrome
paulluis2dev
paulluis2dev
2024-01-20 20:19:54 +08:00
可以试试这个开源库 https://github.com/danfickle/openhtmltopdf
neoblackcap
neoblackcap
2024-01-20 20:30:27 +08:00
@flyqie 没记错的话,是 Puppeteer 那批人做的。相同的人,在 Google 做了 Puppeteer ,去微软做了 Playwright
linmt
linmt
2024-01-20 21:43:26 +08:00
@paulluis2dev 这个也两年多没更新了,而且不支持 flex 和 grid 布局,用不了
kongkx
kongkx
2024-01-20 22:43:46 +08:00
目前看,样式支持最好是 headless chrome 。 要不先用命令行直接调 headless chrome 来测试一下性能? 定位一下是慢在哪里
dengji85
dengji85
2024-01-22 09:22:19 +08:00
gotenberg ,封装好的无头浏览器,docker 运行,直接调用用它的 web 接口
jifengg
jifengg
2024-01-22 10:03:13 +08:00
楼主,给你个解决问题的思路:
1.“很慢”,是多慢?
2.既然“playwright 也是用的 headless-chrome”,那首先,你用浏览器打开“网页”,从打开到你调用浏览器打印命令打印到 PDF 文件完成,算算耗时;
3.如果第二步耗时明显短( 1/10 之类的),那么用 chrome --headless 试试打印这个网页看看是否也差不多;
4.如果还是明显比第一步时间短,那么可能是 playwright 某些问题导致的,可以考虑自己调 chrome 命令行或换一个 headless chrome 封装。
5.如果 1 、2 、3 耗时都差不多,那就和工具无关了
yh7gdiaYW
yh7gdiaYW
2024-01-22 10:29:37 +08:00
@flyqie 微软挖了 puppeteer 的团队成员做的,前两年 star 涨的很快。相对来说,playwright 更偏向自动测试一些,且 API 更丰富友好
zhangdahai
2024-01-26 17:07:32 +08:00
你确定 playwright 不能直接调用浏览器的 screenshot 方法?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1010192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX