• 请不要在回答技术问题时复制粘贴 AI 生成的内容
linmt
V2EX  ›  程序员

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

  •  
  •   linmt · Jan 20, 2024 · 4650 views
    This topic created in 1020 days ago, the information mentioned may be changed or developed.
    目前用的是 playwright ,但是当网页有十几页的时候就很慢,有其他方法吗

    1. 需要等网页加载完成之后再生成 PDF
    2. 可以设置生成 PDF 的宽度
    3. 可以设置每页 PDF 的高度
    19 replies  •  2024-01-26 17:07:32 +08:00
    fzazhao
    fzazhao
    Jan 20, 2024 via Android
    1
    用 Selenium
    flyqie
    flyqie
    Jan 20, 2024 via Android
    2
    你需要的是无头浏览器。。

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

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

    刚才搜了下 playwright ,发现也是个无头框架,但感觉好像。。没怎么见过?
    cvbnt
    cvbnt
    Jan 20, 2024 via Android
    5
    ironpdf ?
    gouflv
    gouflv
    Jan 20, 2024 via iPhone
    6
    Playwright 的性能似乎比 Selenium 、Puppeteer 差一点
    Dockerfile
    Dockerfile
    Jan 20, 2024
    7
    除了无头浏览器,还有一个 wkhtmltopdf ,但是效果应该比无头浏览器稍微差一点
    linmt
    linmt
    OP
    Jan 20, 2024
    8
    @Jwyt 这个好像已经不更新了,不敢用
    linmt
    linmt
    OP
    Jan 20, 2024
    9
    @gouflv 也有试过用 Selenium ,用不来,但是这个好像也是用的浏览器 driver
    linmt
    linmt
    OP
    Jan 20, 2024
    10
    @flyqie 这个偏向于用做自动化测试
    linmt
    linmt
    OP
    Jan 20, 2024
    11
    @youknowiam playwright 也是用的 headless-chrome
    500
    500
    Jan 20, 2024
    12
    可以试试这个开源库 https://github.com/danfickle/openhtmltopdf
    neoblackcap
    neoblackcap
    Jan 20, 2024
    13
    @flyqie 没记错的话,是 Puppeteer 那批人做的。相同的人,在 Google 做了 Puppeteer ,去微软做了 Playwright
    linmt
    linmt
    OP
    Jan 20, 2024
    14
    @paulluis2dev 这个也两年多没更新了,而且不支持 flex 和 grid 布局,用不了
    kongkx
    kongkx
    Jan 20, 2024 via iPhone
    15
    目前看,样式支持最好是 headless chrome 。 要不先用命令行直接调 headless chrome 来测试一下性能? 定位一下是慢在哪里
    yangwa
    yangwa
    Jan 22, 2024
    16
    gotenberg ,封装好的无头浏览器,docker 运行,直接调用用它的 web 接口
    jifengg
    jifengg
    Jan 22, 2024
    17
    楼主,给你个解决问题的思路:
    1.“很慢”,是多慢?
    2.既然“playwright 也是用的 headless-chrome”,那首先,你用浏览器打开“网页”,从打开到你调用浏览器打印命令打印到 PDF 文件完成,算算耗时;
    3.如果第二步耗时明显短( 1/10 之类的),那么用 chrome --headless 试试打印这个网页看看是否也差不多;
    4.如果还是明显比第一步时间短,那么可能是 playwright 某些问题导致的,可以考虑自己调 chrome 命令行或换一个 headless chrome 封装。
    5.如果 1 、2 、3 耗时都差不多,那就和工具无关了
    yh7gdiaYW
    yh7gdiaYW
    Jan 22, 2024
    18
    @flyqie 微软挖了 puppeteer 的团队成员做的,前两年 star 涨的很快。相对来说,playwright 更偏向自动测试一些,且 API 更丰富友好
    zhangdahai
    zhangdahai
    Jan 26, 2024
    19
    你确定 playwright 不能直接调用浏览器的 screenshot 方法?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1278 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 20:59 · PVG 04:59 · LAX 12:59 · JFK 15:59
    ♥ Do have faith in what you're doing.