哈喽,大家好!我是风哥,一个资深Python工程师。今天给大家介绍一个强大的PDF处理神器——PyPDF4!想要在Python中处理PDF文件但不知从何下手?PyPDF4就是你的不二之选,它能让PDF处理变得简单又高效!
一、安装
1pip install PyPDF4
二、基本用法
读取PDF:
1from PyPDF4 import PdfFileReader
2
3def read_pdf(file_path):
4 # 打开PDF文件
5 with open(file_path, 'rb') as file:
6 # 创建PDF读取器
7 reader = PdfFileReader(file)
8
9 # 获取页数
10 num_pages = reader.getNumPages()
11 print(f'总页数: {num_pages}')
12
13 # 获取第一页内容
14 page = reader.getPage(0)
15 text = page.extractText()
16 print(f'第一页内容:\n{text}')
17
18 # 获取PDF信息
19 info = reader.getDocumentInfo()
20 print(f'文档信息:\n{info}')
合并PDF:
1from PyPDF4 import PdfFileMerger
2
3def merge_pdfs(pdf_files, output_path):
4 merger = PdfFileMerger()
5
6 # 添加所有PDF文件
7 for pdf in pdf_files:
8 merger.append(pdf)
9
10 # 保存合并后的文件
11 with open(output_path, 'wb') as output:
12 merger.write(output)
13
14# 使用示例
15files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
16merge_pdfs(files, 'merged.pdf')
拆分PDF:
1from PyPDF4 import PdfFileReader, PdfFileWriter
2
3def split_pdf(input_path, start_page, end_page, output_path):
4 # 创建读取器和写入器
5 reader = PdfFileReader(open(input_path, 'rb'))
6 writer = PdfFileWriter()
7
8 # 添加指定页面
9 for page_num in range(start_page - 1, end_page):
10 writer.addPage(reader.getPage(page_num))
11
12 # 保存新文件
13 with open(output_path, 'wb') as output:
14 writer.write(output)
三、高级用法
添加水印:
1from PyPDF4 import PdfFileReader, PdfFileWriter
2
3def add_watermark(input_path, watermark_path, output_path):
4 # 打开原始PDF和水印PDF
5 with open(input_path, 'rb') as file:
6 reader = PdfFileReader(file)
7 watermark = PdfFileReader(open(watermark_path, 'rb'))
8 writer = PdfFileWriter()
9
10 # 为每页添加水印
11 for i in range(reader.getNumPages()):
12 page = reader.getPage(i)
13 page.mergePage(watermark.getPage(0))
14 writer.addPage(page)
15
16 # 保存结果
17 with open(output_path, 'wb') as output:
18 writer.write(output)
加密PDF:
1from PyPDF4 import PdfFileReader, PdfFileWriter
2
3def encrypt_pdf(input_path, output_path, password):
4 reader = PdfFileReader(open(input_path, 'rb'))
5 writer = PdfFileWriter()
6
7 # 复制所有页面
8 for page in range(reader.getNumPages()):
9 writer.addPage(reader.getPage(page))
10
11 # 设置密码
12 writer.encrypt(password)
13
14 # 保存加密文件
15 with open(output_path, 'wb') as output:
16 writer.write(output)
四、实际应用案例
PDF批处理工具:
1import os
2from PyPDF4 import PdfFileReader, PdfFileWriter
3
4class PDFProcessor:
5 def __init__(self, input_dir, output_dir):
6 self.input_dir = input_dir
7 self.output_dir = output_dir
8 os.makedirs(output_dir, exist_ok=True)
9
10 def process_all_pdfs(self):
11 for filename in os.listdir(self.input_dir):
12 if filename.endswith('.pdf'):
13 input_path = os.path.join(self.input_dir, filename)
14
15 # 处理每个PDF文件
16 self.compress_pdf(input_path)
17 self.add_page_numbers(input_path)
18 self.extract_first_page(input_path)
19
20 def compress_pdf(self, input_path):
21 # 实现PDF压缩逻辑
22 pass
23
24 def add_page_numbers(self, input_path):
25 # 实现添加页码逻辑
26 pass
27
28 def extract_first_page(self, input_path):
29 # 提取第一页
30 output_path = os.path.join(
31 self.output_dir,
32 f'first_page_{os.path.basename(input_path)}'
33 )
34
35 reader = PdfFileReader(open(input_path, 'rb'))
36 writer = PdfFileWriter()
37 writer.addPage(reader.getPage(0))
38
39 with open(output_path, 'wb') as output:
40 writer.write(output)
PDF表单处理:
1from PyPDF4 import PdfFileReader
2
3def process_pdf_form(input_path):
4 with open(input_path, 'rb') as file:
5 reader = PdfFileReader(file)
6
7 # 检查是否是表单
8 if reader.getFormTextFields():
9 fields = reader.getFormTextFields()
10
11 # 处理表单字段
12 for field_name, value in fields.items():
13 print(f'字段名: {field_name}, 值: {value}')
14
15 return fields
16 else:
17 print('此PDF没有表单字段')
18 return None
19
20def extract_form_data(input_path):
21 form_data = process_pdf_form(input_path)
22 if form_data:
23 # 处理提取的数据
24 # 例如保存到数据库或导出到Excel
25 pass
五、总结
使用PyPDF4时需要注意:
处理大文件时要注意内存使用
添加适当的异常处理
对加密PDF需要特殊处理
某些PDF可能无法正确提取文本
PyPDF4是一个非常实用的工具,它能帮助我们轻松处理各种PDF相关的任务。通过本文的学习,相信大家已经掌握了它的基本用法。接下来就要靠你们动手实践啦!
今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问风哥哦。祝大家学习愉快,收获满满!