使用 5 行 Python 代码拆分或合并 PDF 文件

liftword2个月前 (03-25)技术文章7

如果希望从大型 PDF 文件中提取特定页面或将多个 PDF 文件合并为一个文件,可以使用一些 PDF 编辑器来完成,但是你可能会发现拆分或合并功能在很多免费版 PDF 编辑工具中通常不可用。在本文中,我将分享一个简单的解决方案,用几行 Python 代码拆分或合并多个 PDF 文件。

Python 中的 PyPDF3 库提供了读取、合并、写入 pdf 文件的类,方便程序员完成 Pdf 文件的处理操作。

  • PdfFileReader: 用于执行与读取文件相关的所有操作。
  • PdfFileMerger: 用于将多个 pdf 文件合并在一起。
  • PdfFileWriter: 用于对 pdf 执行写入操作。

使用 PyPDF3 处理 Pdf 文件,需要在工作环境中安装此库。

pip install PyPDF3

拆分 PDF 文件

想从 PDF 文件中提取特定页面并使其成为单独的 PDF 文件时,可以使用 PdfFileReader 读取原始文件,然后获取特定页面(页码从 0 开始)。使用 PdfFileWriter 的 addPage() 方法将 PDF 页面添加到新的 PDF 中并保存。

下面的示例代码中,从“1.Pdf”提取第一页,并将其存储到一个名为“2.pdf” 的 PDF 文件中。

from PyPDF3 import PdfFileWriter, PdfFileReader
input_pdf = PdfFileReader("1.pdf")
output = PdfFileWriter()
output.addPage(input_pdf.getPage(0))
with open("2.pdf", "wb") as out:
    output.write(out)

「拓展」

可以使用 getNumPages() 方法,获取 Pdf 中的页码,灵活的进行页面处理。

下面的示例代码中,从“1.Pdf”分别提取偶数页和奇数页,并将其分别存储到“2.pdf”和“3.pdf”中。

from PyPDF3 import PdfFileWriter, PdfFileReader
input_pdf = PdfFileReader("1.pdf")
output2 = PdfFileWriter()
output3 = PdfFileWriter()
for page in range(input_pdf.getNumPages()):
    current_page = input_pdf.getPage(page)
    if page % 2 == 0:
        output2.addPage(current_page)
    else:
        output3.addPage(current_page)
with open("2.pdf", "wb") as out:
     output2.write(out)
with open("3.pdf", "wb") as out:
     output3.write(out)

合并 PDF 文件

要将多个 PDF 文件合并为一个文件,可以使用 PdfFileMerger 来实现。虽然也可以使用 PdfFileWriter,但是当在合并页面之前不需要编辑页面时,PdfFileMerger 可能更直接。

下面示例代码中,使用 PdfFileMerger 的 append() 方法将多个 PDF 文件合并写入一个名为 merged.pdf 的 PDF 文件中。

from PyPDF3 import PdfFileReader, PdfFileMerger
pdf_file1 = PdfFileReader("1.pdf")
pdf_file2 = PdfFileReader("2.pdf")
output = PdfFileMerger()
output.append(pdf_file1)
output.append(pdf_file2)
with open("3.pdf", "wb") as out:
    output.write(out)

如果不想包含原始文件中的所有页面,可以指定一个具有起始页码和结束页码的元组作为 append() 的页面参数,以便仅将指定的页面添加到新 PDF 文件中。

output.append(pdf_file1, (0, 10)) # 前十页

append() 是在文件最后添加新页面,如果想指定要放入页面的位置,则应使用 merge(),允许指定要添加的页面的位置。

相关文章

Python 中如何调用其他文件的类或函数

从程序员的角度来说,跨文件调用是为了提高代码的模块化和可重用性。想象一下,如果你的程序非常庞大,所有的代码都挤在一个文件里,那将会变得难以维护和修改。通过将不同的功能模块拆分到不同的文件中,我们可以更...

异或的魅力!图解「数组中两个数的最大异或值」

今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值。在 异或 这个知识点里面属于一个中高难度的题目。题目描述 给定一个非空数组,数组中元素为 a0, a1, a2,...

Python XOR异或 操作

Python XOR: 8 分钟阅读关于Python XOR运算符以及如何使用它来计算Python中两个变量的异或(XOR)。此外,您将学习它在密码学、位操作、生成校验和等方面的应用。本教程中的代码...

python散装笔记——105: 从字符串或列表写入 CSV

ParameterDetailsopen ("/path/", "mode")指定 CSV 文件的路径open (path, "mode")指定打开文件的模式(读、写等)csv.writer(file...

Python静态方法@使用,类或函数调用之带括号、不带括号

20221209星期五:1,函数加了静态 @staticmethod ,类不进行实例化,就可以进行调用函数2,函数调用带括号,调用的是函数的执行结果;3,函数调用不带括号,调用的是函数本身,得到的是一...