[关闭]
@zhangyu756897669 2017-09-29T14:32:21.000000Z 字数 2763 阅读 774

用python合并PDF文件

python官方文档


项目:从许多PDF中组合选择页面

假设您将无数的PDF文档合并到一个PDF文件中。他们每个都有一个封面作为第一页,但你不希望封面在最后的结果重复。即使有很多免费程序来组合PDF,但是很多都是将整个文件合并在一起。我们来编写一个Python程序来自定义组合PDF中所需的页面。

实现这个技术的计划是什么:

在实现方面,您的代码将需要执行以下操作:

步骤1:查找所有PDF文件

首先,您的程序需要在当前工作目录中获取.pdf扩展名的所有文件的列表,并对它们进行排序。

  1. #将当前工作目录中的所有PDF都合并到一起
  2. import PyPDF2, os #❶
  3. # 得到所有pdf 的名称
  4. pdfFiles = []
  5. for filename in os.listdir('.'):
  6. if filename.endswith('.pdf'):
  7. pdfFiles.append(filename)#❷
  8. pdfFiles.sort(key=str.lower)#❸
  9. pdfWriter = PyPDF2.PdfFileWriter()#❹

=该代码导入os和PyPDF2模块❶。 os.listdir('。')调用将返回当前工作目录中每个文件的列表。代码循环遍历此列表,并将只有.pdf扩展名的文件添加到pdfFiles❷。之后,该列表按照字母顺序排列,使用key = str.lower关键字参数sort()❸。创建PdfFileWriter对象来保存组合的PDF页面❹

步骤2:打开每个PDF

现在程序必须阅读pdfFiles中的每个PDF文件。

  1. #将当前工作目录中的所有PDF都合并到一起
  2. import PyPDF2, os #❶
  3. # 得到所有pdf 的名称
  4. pdfFiles = []
  5. for filename in os.listdir('.'):
  6. if filename.endswith('.pdf'):
  7. pdfFiles.append(filename)#❷
  8. pdfFiles.sort(key=str.lower)#❸
  9. pdfWriter = PyPDF2.PdfFileWriter()#❹
  10. #循环遍历所有的PDF文件。
  11. for filename in pdfFiles:
  12. pdfFileObj = open(filename, 'rb')
  13. pdfReader = PyPDF2.PdfFileReader(pdfFileObj)

对于每个PDF,循环通过调用open()以“rb”作为第二个参数,以二进制模式打开文件名。 open()调用返回一个File对象,该对象被传递给PyPDF2.PdfFileReader()以为该PDF文件创建一个PdfFileReader对象。

步骤3:添加每个页面

对于每个PDF,您将需要循环除第一个以外的每个页面。

  1. #将当前工作目录中的所有PDF都合并到一起
  2. import PyPDF2, os #❶
  3. # 得到所有pdf 的名称
  4. pdfFiles = []
  5. for filename in os.listdir('.'):
  6. if filename.endswith('.pdf'):
  7. pdfFiles.append(filename)#❷
  8. pdfFiles.sort(key=str.lower)#❸
  9. pdfWriter = PyPDF2.PdfFileWriter()#❹
  10. #循环遍历所有的PDF文件。
  11. for filename in pdfFiles:
  12. pdfFileObj = open(filename, 'rb')
  13. pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
  14. #循环遍历所有页面(第一个除外)并添加它们。
  15. for pageNum in range(1, pdfReader.numPages):#❶
  16. pageObj = pdfReader.getPage(pageNum)
  17. pdfWriter.addPage(pageObj)

for循环中的代码将每个Page对象单独复制到PdfF​​ileWriter对象。记住,你想跳过第一页。由于PyPDF2认为0是第一页,所以循环应该从1❶开始,然后上升到pdfReader.numPages中,但不包括整数。

步骤4:保存结果

在这些嵌套for循环完成循环后,pdfWriter变量将包含PdfFileWriter对象,并将所有PDF的页面组合在一起。最后一步是将此内容写入硬盘驱动器上的文件。

  1. #将当前工作目录中的所有PDF都合并到一起
  2. import PyPDF2, os #❶
  3. # 得到所有pdf 的名称
  4. pdfFiles = []
  5. for filename in os.listdir('.'):
  6. if filename.endswith('.pdf'):
  7. pdfFiles.append(filename)#❷
  8. pdfFiles.sort(key=str.lower)#❸
  9. pdfWriter = PyPDF2.PdfFileWriter()#❹
  10. #循环遍历所有的PDF文件。
  11. for filename in pdfFiles:
  12. pdfFileObj = open(filename, 'rb')
  13. pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
  14. #循环遍历所有页面(第一个除外)并添加它们。
  15. for pageNum in range(1, pdfReader.numPages):#❶
  16. pageObj = pdfReader.getPage(pageNum)
  17. pdfWriter.addPage(pageObj)
  18. #将生成的PDF保存到文件。
  19. pdfOutput = open('allminutes.pdf', 'wb')
  20. pdfWriter.write(pdfOutput)
  21. pdfOutput.close()

将'wb'传递给open()以二进制模式打开输出PDF文件allminutes.pdf。然后,将生成的File对象传递给write()方法将创建实际的PDF文件。调用close()方法完成该程序。

类似程序的想法

能够从其他PDF页面创建PDF将允许您制作可执行以下操作的程序:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注