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

如何用Python下载并合并PDF?现有代码生成损坏无法打开的PDF

问题原因

直接将多个PDF的二进制内容拼接在一起会导致文件损坏,因为每个PDF都有独立的文件结构(包括文件头、交叉引用表、尾注等),简单的二进制拼接会破坏这些结构,PDF阅读器无法识别这种混乱的格式。

正确实现方案

下面提供两种可靠的PDF下载与合并方法,使用专业的PDF处理库:

方法1:使用PyPDF2库

PyPDF2是专门用于PDF操作的Python库,支持合并、拆分等基础功能。

步骤1:安装依赖

pip install PyPDF2 requests

步骤2:实现代码

import requests
from PyPDF2 import PdfMerger
from io import BytesIO

# 初始化PDF合并器
merger = PdfMerger()
links_to_announcement = ["pdf_url_1", "pdf_url_2"]  # 替换为你的实际URL列表

for pdf_link in links_to_announcement:
    # 下载PDF到内存流
    response = requests.get(pdf_link)
    if response.status_code == 200:
        pdf_stream = BytesIO(response.content)
        # 将PDF添加到合并队列
        merger.append(pdf_stream)
    else:
        print(f"下载失败:{pdf_link},状态码:{response.status_code}")

# 保存合并后的文件
with open("joined_pdfs.pdf", "wb") as output_file:
    merger.write(output_file)

# 关闭合并器释放资源
merger.close()

方法2:使用PyMuPDF(fitz)库

PyMuPDF处理PDF的兼容性更强,性能更优,适合处理复杂或不同版本的PDF文件。

步骤1:安装依赖

pip install pymupdf requests

步骤2:实现代码

import requests
import fitz
from io import BytesIO

# 创建空的输出PDF文档
output_pdf = fitz.open()
links_to_announcement = ["pdf_url_1", "pdf_url_2"]  # 替换为你的实际URL列表

for pdf_link in links_to_announcement:
    response = requests.get(pdf_link)
    if response.status_code == 200:
        # 读取下载的PDF内容
        input_pdf = fitz.open("pdf", BytesIO(response.content))
        # 将所有页面插入到输出PDF
        output_pdf.insert_pdf(input_pdf)
        input_pdf.close()
    else:
        print(f"下载失败:{pdf_link},状态码:{response.status_code}")

# 保存合并结果
output_pdf.save("joined_pdfs.pdf")
output_pdf.close()
注意事项
  • 必须验证下载状态:添加response.status_code检查,避免把错误页面(如404、500的HTML内容)当作PDF合并,导致最终文件损坏。
  • 处理大文件时,建议将PDF临时保存到本地磁盘,避免内存占用过高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:25:54