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

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

  •  
  •   linmt · Jan 20, 2024 · 4040 views
    This topic created in 844 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
        1
    fzazhao  
       Jan 20, 2024 via Android
    用 Selenium
    flyqie
        2
    flyqie  
       Jan 20, 2024 via Android
    你需要的是无头浏览器。。

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

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

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