欢迎访问本站,希望站内信息可以帮助到您!感兴趣的,可以加入我的知识星球,一对一解答!

Python实用模块(三十一)PyPDF2

实用模块 迷途小书童 0评论

环境

前言

PyPDF2 是一个开源的、免费的、纯 python 语言编写的库,主要用来处理 pdf 文件,包括了常见的分离、合并、裁剪、转换、加密、解密等功能。

安装

使用 pip 安装,执行命令

pip install PyPDF2

使用示例

下面来看看几个常见的 pdf 文件操作示例

获取基本信息

主要是利用 PdfReader

from PyPDF2 import PdfReader

reader = PdfReader("test.pdf")

# 总页数
number_of_pages = len(reader.pages)

# 第一页
page = reader.pages[0]
text = page.extract_text()

合并

准备待合并的 pdf 文件统一放在文件夹 pdfs 下,如果有合并顺序要求,就将原文件按特定顺序命令,如 1.pdf2.pdf

import os
from PyPDF2 import PdfFileMerger

src_path = 'pdfs'

# 将待拼接的pdf文件以绝对路径的形式放在一个列表里 
pdf_list = [f for f in os.listdir(src_path) if f.endswith('.pdf')]
pdf_list = [os.path.join(src_path, filename) for filename in pdf_list]

pdf_file_merger = PdfFileMerger()
for pdf in pdf_list:
    pdf_file_merger.append(pdf, import_bookmarks=False)

pdf_file_merger.write("merged.pdf")

文件加密

from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("test.pdf")
writer = PdfWriter()

# 拷贝每一页的内容
for page in reader.pages:
    writer.add_page(page)

# 在新的pdf文件中添加密码
writer.encrypt("secret-password")

# 保存成新的pdf
with open("encrypted.pdf", "wb") as f:
    writer.write(f)

执行代码后,打开生成的 encrypted.pdf,会要求输入密码才能查看

文件解密

from PyPDF2 import PdfReader, PdfWriter

# 读取上面加密的pdf文件
reader = PdfReader("encrypted.pdf")
writer = PdfWriter()

# 解密
if reader.is_encrypted:
    reader.decrypt("secret-password")

# 将每一页内容加到writer对象中
for page in reader.pages:
    writer.add_page(page)

# 保存解密后的pdf
with open("decrypted.pdf", "wb") as f:
    writer.write(f)

代码执行后,新生成的 decrypted.pdf 就不用输入密码了

添加水印

from PyPDF2 import PdfWriter, PdfReader

# 读取作为水印的pdf
watermark = PdfReader("watermark.pdf")

# 待加水印的pdf
reader = PdfReader("test.pdf")
page = reader.pages[0]

# watermark.pdf的第一页作为水印
page.merge_page(watermark.pages[0])

writer = PdfWriter()
writer.add_page(page)

# 保存成新的pdf
with open("output.pdf", "wb") as fp:
    writer.write(fp)

最后,更详细的文档,可以参考官方的链接 https://pypdf2.readthedocs.io/en/latest/

Python实用模块专题

更多有用的 python 模块,请移步

https://xugaoxiang.com/category/python/modules/

喜欢 (0)
发表我的评论
取消评论

表情