首页Python【Python计算生态】p...

【Python计算生态】pypdf——PDF文档操作库

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

pypdf是一个免费且开源的纯Python PDF库,能够对PDF文件的页面进行拆分、合并、裁剪和转换。它还可以向PDF文件添加自定义数据、查看选项以及密码保护功能。此外,pypdf还可以从PDF中提取文本和元数据。
直接使用pip安装(pypdf需要Python 3.8+版本才能运行):
pip install pypdf
如果需要使用pypdf进行AES加密或解密,需要安装额外的依赖:
pip install pypdf[crypto]
如果需要提取图像,需要安装Pillow
pip install pypdf[image]
GitHub页面:
https://github.com/py-pdf/pypdf

02
使用

PyPDF支持PDF文件的提取文本、合并、提取图像、添加水印等操作。以下是关于它的基本用法和示例:

示例1:读取元数据:

元数据(metadata)是PDF文件中存储的关于文件本身的描述性信息,例如作者、主题、创建者、创建日期等。

以下代码是读取PDF元数据的典型示例,适用于快速提取文件的基本信息。需要注意的是,因为并非所有PDF文件都包含完整的元数据,如果某些字段未被设置,将返回None

from pypdf import PdfReader

reader = PdfReader("example.pdf")

meta = reader.metadata

# PDF 文件的作者
print(f"author:{meta.author}")
# PDF 文件的主题或描述
print(f"subject:{meta.subject}")
# 创建 PDF 文件的工具或应用程序
print(f"creator:{meta.creator}")
# 用于生成 PDF 文件的工具或库
print(f"producer:{meta.producer}")
# PDF 文件的创建日期
print(f"creation_date:{meta.creation_date}")
# PDF 文件的最后修改日期
print(f"modification_date:{meta.modification_date}")


  • 示例2:读取PDF文件并提取文本

使用pypdfextract_text()方法可以快速提取PDF文件中的文本内容。但是需要注意的是,该方法依赖于PDF文件的文本层。如果PDF文件是扫描生成的(即只有图像,没有文本层),则无法提取文本。

from pypdf import PdfReader

# 打开 PDF 文件
pdf_path = 'example.pdf'
reader = PdfReader(pdf_path)

# 获取 PDF 文件的总页数
num_pages = len(reader.pages)

# 提取每一页的文本
text = ""
for page in reader.pages:
    text += page.extract_text()

print(text)


  • 示例3:合并多个 PDF 文件

使用pypdf库中的PdfWriter类来实现将多个PDF文件合并成一个PDF文件的操作。

from pypdf import PdfWriter

# 创建一个 PdfWriter 对象
merger = PdfWriter()

# 要合并的 PDF 文件列表
pdf_files = ['example.pdf''example2.pdf''example3.pdf']

# 遍历 PDF 文件列表并添加到合并器中
for pdf in pdf_files:
    merger.append(pdf)

# 保存合并后的 PDF 文件
output_pdf = 'merged.pdf'
merger.write(output_pdf)
merger.close()


  • 示例4:读取PDF文件并提取图像

该功能需要安装对应的依赖项。

下述代码的功能是从一个PDF文件中提取第一页的所有图像,并将它们保存为JPG格式的文件。使用了pypdf库来读取PDF文件,Pillow库来处理图像,并通过BytesIO来处理二进制数据。

from pypdf import PdfReader
from PIL import Image
from io import BytesIO

reader = PdfReader("example.pdf")
# 获取PDF文件的第一页
page = reader.pages[0]
# 遍历图像对象
for count, image_file_object in enumerate(page.images):
    # 使用 BytesIO 将二进制数据转为图像对象
    image_data = BytesIO(image_file_object.data)
    
    try:
        # 用 Pillow 打开图片并转换为 RGB 模式(JPG 不支持透明度)
        img = Image.open(image_data).convert("RGB")
        
        # 生成文件名:使用索引 + 自定义前缀,避免原始名称的混乱
        filename = f"image_{count}.jpg"
        
        # 保存为 JPG 格式,质量参数可选(1-100)
        img.save(filename, "JPEG", quality=85)
        print(f"Saved: {filename}")
    
    except Exception as e:
        print(f"Error processing image {count}: {str(e)}")


更多内容可以前往官方文档查看:

https://pypdf.readthedocs.io/en/stable/

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments