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

308 天前
 linmt
目前用的是 playwright ,但是当网页有十几页的时候就很慢,有其他方法吗

1. 需要等网页加载完成之后再生成 PDF
2. 可以设置生成 PDF 的宽度
3. 可以设置每页 PDF 的高度
2867 次点击
所在节点    程序员
19 条回复
fzazhao
308 天前
用 Selenium
flyqie
308 天前
你需要的是无头浏览器。。

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

不可复制的话无头浏览器直接截图拼,可复制的话就得调无头导 pdf 了。
youknowiam
308 天前
我用的 headless-chrome ,https://github.com/rust-headless-chrome/rust-headless-chrome ,Java 也有类似的框架。
flyqie
308 天前
@flyqie #2

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

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

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

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

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

© 2021 V2EX