V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linmt
V2EX  ›  程序员

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

  •  
  •   linmt · 312 天前 · 2876 次点击
    这是一个创建于 312 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前用的是 playwright ,但是当网页有十几页的时候就很慢,有其他方法吗

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

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

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

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