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

Python中合并字节形式PDF失败:仅显示单个文件求助

问题原因与解决方案

问题原因

直接拼接两个PDF的字节对象是错误操作——PDF是具有复杂内部结构的文件格式,每个完整PDF都包含独立的文件头、交叉引用表、目录结构和文件尾标记。PDF阅读器只会解析第一个完整的PDF结构,后续拼接的字节内容会被视为无效数据忽略,因此最终仅显示第一个PDF。

解决方案

必须使用专门处理PDF的Python库来合并文件,以下是两种常用实现方式:

方式1:使用PyPDF2库

from PyPDF2 import PdfMerger
import io

# 将字节格式PDF转换为可读取的IO对象
pdf1_io = io.BytesIO(pdf1)
pdf2_io = io.BytesIO(pdf2)

# 初始化合并器并添加待合并PDF
merger = PdfMerger()
merger.append(pdf1_io)
merger.append(pdf2_io)

# 将合并结果写入字节流
output_stream = io.BytesIO()
merger.write(output_stream)
output_stream.seek(0)  # 将指针移至流起始位置

# 构建响应返回
response = HttpResponse(output_stream.read(), content_type="application/pdf")
response["Content-Disposition"] = 'attachment; filename="merged_form.pdf"'

方式2:使用PyMuPDF(fitz)库

PyMuPDF在PDF处理上性能更优,操作更灵活:

import fitz
import io

# 从字节流加载PDF文档
doc1 = fitz.open("pdf", pdf1)
doc2 = fitz.open("pdf", pdf2)

# 创建空文档用于合并
merged_doc = fitz.open()
merged_doc.insert_pdf(doc1)
merged_doc.insert_pdf(doc2)

# 将合并后的文档转为字节流
merged_bytes = merged_doc.tobytes()

# 构建响应返回
response = HttpResponse(merged_bytes, content_type="application/pdf")
response["Content-Disposition"] = 'attachment; filename="merged_form.pdf"'

注意:使用前需安装对应库,执行pip install pypdf2或pip install pymupdf即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:12:13