PyPDF4,一个 PDF 处理利器的 Python 库!

文摘   2024-11-04 06:00   上海  

哈喽,大家好!我是风哥,一个资深Python工程师。今天给大家介绍一个强大的PDF处理神器——PyPDF4!想要在Python中处理PDF文件但不知从何下手?PyPDF4就是你的不二之选,它能让PDF处理变得简单又高效!

一、安装

1pip install PyPDF4

二、基本用法

  1. 读取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}')
  1. 合并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')
  1. 拆分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)

三、高级用法

  1. 添加水印:

 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)
  1. 加密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)

四、实际应用案例

  1. 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)
  1. 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时需要注意:

  1. 处理大文件时要注意内存使用

  2. 添加适当的异常处理

  3. 对加密PDF需要特殊处理

  4. 某些PDF可能无法正确提取文本

PyPDF4是一个非常实用的工具,它能帮助我们轻松处理各种PDF相关的任务。通过本文的学习,相信大家已经掌握了它的基本用法。接下来就要靠你们动手实践啦!

今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区问风哥哦。祝大家学习愉快,收获满满!

py学习基地ai
分享生活百态,情感故事,了解不一样的人生
 最新文章