4

Python实用模块(三十一)PyPDF2

 1 year ago
source link: https://xugaoxiang.com/2022/06/11/python-module-31-pypdf2/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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,会要求输入密码才能查看

bcc7c83eb2bf9911.png
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/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK