You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Playwright Python生成PDF空白/格式错误问题求助

解决方案:Playwright Python处理PDF预览页生成PDF的空白/格式错误问题

核心原因

直接访问PDF URL时,Chromium会启动内置PDF阅读器,而page.pdf()是针对网页HTML内容的渲染工具,无法正确识别阅读器内的PDF内容,导致空白或格式错误;旧版无头模式(headless=True)对PDF阅读器的兼容性较差,引发运行失败。


方案1:直接下载PDF(推荐,高效可靠)

目标URL本身就是PDF文件,无需通过页面渲染,直接发起网络请求获取文件内容:

def test():
    from playwright.sync_api import sync_playwright
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        context = browser.new_context()
        # 发起GET请求获取PDF原始内容
        response = context.request.get('https://nyc3.digitaloceanspaces.com/midia/wp-content/uploads/2023/01/4tmrioel-sample.pdf')
        # 验证请求是否成功
        assert response.ok, f"请求失败,状态码:{response.status}"
        # 将二进制内容写入本地文件
        with open('Test.pdf', 'wb') as f:
            f.write(response.body())
        browser.close()
test()

方案2:禁用PDF阅读器,通过页面触发下载(适用于间接打开PDF的场景)

使用Playwright新版无头模式(headless="new"),搭配禁用PDF阅读器的启动参数,让浏览器直接触发PDF下载而非预览:

def test():
    from playwright.sync_api import sync_playwright
    with sync_playwright() as p:
        browser = p.chromium.launch(
            headless="new",
            args=[
                "--disable-pdf-extension",
                "--disable-plugin-pdf-viewer",
                "--plugins=0"
            ]
        )
        context = browser.new_context()
        page = context.new_page()
        # 监听下载事件,访问URL时自动触发下载
        with page.expect_download() as download_info:
            page.goto('https://nyc3.digitaloceanspaces.com/midia/wp-content/uploads/2023/01/4tmrioel-sample.pdf')
        download = download_info.value
        # 保存下载的PDF文件
        download.save_as('Test.pdf')
        browser.close()
test()

原代码无效的原因

  1. headless=False时,PDF阅读器界面加载需要时间,page.pdf()执行过早会捕获空白页面;
  2. 旧版headless=True模式对PDF阅读器的支持存在兼容性问题,导致无法正常运行;
  3. page.pdf()生成的是网页渲染结果,而非原始PDF内容,因此会出现阅读器UI导致的格式错误。

内容的提问来源于stack exchange,提问作者Pedro Pessuto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:55:29