CodeGym /Java 课程 /Python SELF ZH /合并多个PDF文件为一个文档

合并多个PDF文件为一个文档

Python SELF ZH
第 43 级 , 课程 3
可用

1. 使用PyPDF2合并PDF

为什么要合并PDF文件

首先,我们来搞清楚为什么需要合并多个PDF文件。毕竟俗话说得好:“一个PDF总比十个强!” 在工作中,你可能会有报告、研究结果、技术文档或演示文稿,它们通常是以单独的文件形式提供的。不断在它们之间切换不仅麻烦,还可能造成遗漏。通过将所有文件合并为一个文档,你可以简化数据管理并创建更具结构化的分析和分发方式。

此外,合并PDF文件更适合存档、创建完整的最终报告,或者将多个版本的文档汇总跟踪更改。总之,用途多多!

使用PyPDF2合并PDF的基本操作

首先,让我们掌握使用PyPDF2的基本操作。我们将创建一个脚本,把多份PDF合并为一个。当然,代码会附带注释,帮助你理解每一步都在做什么。

Python

import PyPDF2

# 创建一个 PdfMerger 对象
pdf_merger = PyPDF2.PdfMerger()

# 我们想要合并的PDF文件列表
pdf_files = ['document1.pdf', 'document2.pdf', 'document3.pdf']

# 遍历每个文件并添加到 PdfMerger
for file in pdf_files:
    pdf_merger.append(file)

# 将结果保存到新的PDF文件中
output_filename = 'merged_document.pdf'
with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

# 关闭 PdfMerger 对象以释放资源
pdf_merger.close()

print(f"已创建合并的PDF: {output_filename}")

合并文档的顺序和结构

现在我们已经学会了合并PDF文档,是时候考虑页面顺序了。请记住,PyPDF2 会按照你传递给 .append() 方法的文件顺序添加页面。因此,列表 pdf_files 的顺序会直接影响最终文档中的页面顺序。

2. 合并单独的页面

如果你不是想合并整个文档,而是从中挑选部分内容组装成最终的文档,那么需要使用 PdfWriter 类而不是 PdfMerger。示例代码如下:

Python

import PyPDF2

# 需要合并的PDF文件列表
pdf_files = ["file1.pdf", "file2.pdf", "file3.pdf"]

# 创建 PdfWriter 对象来写入合并的PDF
pdf_writer = PyPDF2.PdfWriter()

# 遍历每个PDF文件
for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # 遍历文件中的每一页并添加到 PdfWriter
        for page_num in range(len(pdf_reader.pages)):
            # 可以跳过你不想添加的页面
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# 保存最终的合并PDF
with open("merged_document.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

此代码如何工作?

  1. 创建文件列表: 列表 pdf_files 包含需要合并的PDF文档路径。
  2. 初始化 PdfWriter: pdf_writer 被用来创建新的PDF文件。
  3. 遍历每个文件: 每一个PDF文件都会以只读模式打开。
  4. 添加页面: 文件中的每一页都会被依次添加到 pdf_writer 中,方法是使用 add_page()
  5. 保存结果: 所有页面添加完成后,将新PDF文件写入 merged_document.pdf

3. 美化新文档

添加书签和目录

如果你的合并文档过于庞大,难以导航怎么办?这时书签就派上用场了!PyPDF2 支持添加基本的书签,帮助你更方便地在文档中导航。让我们为每个合并的文档添加书签。

Python

pdf_merger = PyPDF2.PdfMerger()

# 用于书签的页面偏移
page_offset = 0

for file in pdf_files:
    # 读取当前文档
    pdf_reader = PyPDF2.PdfReader(file)

    # 将文档添加到 PdfMerger
    pdf_merger.append(file)

    # 添加以文件名为名字的书签
    pdf_merger.add_bookmark(file, page_offset)

    # 更新页面偏移
    page_offset += len(pdf_reader.pages)

with open(output_filename, 'wb') as output_file:
    pdf_merger.write(output_file)

pdf_merger.close()

这个小技巧可以帮你保持冷静,在PDF海洋中不迷失。

更新合并文件的元数据

合并后,我们可以添加或修改文档的元数据,比如作者、标题和关键词。

Python

import PyPDF2

pdf_files = ["file1.pdf", "file2.pdf"]
pdf_writer = PyPDF2.PdfWriter()

for pdf_file in pdf_files:
    with open(pdf_file, "rb") as file:
        pdf_reader = PyPDF2.PdfReader(file)
        for page_num in range(len(pdf_reader.pages)):
            page = pdf_reader.pages[page_num]
            pdf_writer.add_page(page)

# 添加元数据
pdf_writer.add_metadata({
    "/Title": "合并文档",
    "/Author": "Ivan Ivanov",
    "/Subject": "销售报告"
})

# 保存合并文件
with open("merged_with_metadata.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

该代码为文档添加了元数据,帮助识别和构建结构化的文档。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION