首页 > 编程语言 >Python - PyPDF2模块的简单使用

Python - PyPDF2模块的简单使用

时间:2022-08-19 10:38:03浏览次数:58  
标签:name Python writer PyPDF2 模块 PDF pdf page

1.简介

PyPDF的前身是PyPDF包在2005年发布,该包的最后一个版本发布于2010年,后来大约经过一年左右,名为Phasit的公司赞助PyPDF的一个分支后来命名为PyPDF2,两个版本功能都基本一样,最大的区别就是PyPDF2中加入了支持Python3功能。后面又出现了PyPDF3、PyPDF4等不同版本,但这些包并没有对PyPDF2功能向后完全兼容,受欢迎程度当然也不如PyPDF2。

2.安装

使用命令:pip install pypdf2。

3.应用1:将单个PDF拆分为多个PDF文件

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-19
# Name     : test01
# Software : PyCharm
# Note     : 使用PyPDF2模块将单个PDF拆分为多个PDF文件
# 导入模块
from  PyPDF2 import PdfFileReader, PdfFileWriter

# pdf 文档
pdf_name = "test.pdf"

pdf_reader = PdfFileReader(pdf_name)
# PDF页数
page_num = pdf_reader.getNumPages()

i_count = 0  # 计数
for i in range(0, page_num, 20):
    # 每20页拆分成一个新的PDF文件
    i_count += 1
    pdf_writer = PdfFileWriter()
    for j in range(i, min(i + 20, page_num)):
        pdf_writer.addPage(pdf_reader.getPage(j))
    save_pdf_name = str(i_count).zfill(3) + ".pdf"
    with open(save_pdf_name, "wb") as fo:
        pdf_writer.write(fo)

4.应用2:将多个PDF合并为一个PDF文件

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-19
# Name     : test02
# Software : PyCharm
# Note     : 使用PyPDF2模块将多个PDF合并为一个PDF文件
# 导入模块
from  PyPDF2 import PdfFileReader, PdfFileWriter

# 需要合并的PDF文件名列表
merge_pdf_names = ["001.pdf", "002.pdf", "003.pdf", "004.pdf"]

merge_writer = PdfFileWriter()
# 遍历处理每一个PDF文件
for pdf_name in merge_pdf_names:
    curr_reader = PdfFileReader(pdf_name)
    page_num = curr_reader.getNumPages()
    for i in range(page_num):
        merge_writer.addPage(curr_reader.getPage(i))

with open("merge.pdf", "wb") as fo:
    merge_writer.write(fo)

5.应用3:对PDF添加水印

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-19
# Name     : test03
# Software : PyCharm
# Note     : 使用PyPDF2模块对PDF添加水印
# 导入模块
from  PyPDF2 import PdfFileReader, PdfFileWriter

# pdf 文档
pdf_name = "test.pdf"
# 水印pdf 文档
water_mark = "watermark.pdf"
# 加完水印的pdf 文档
new_pdf_name = "test_watermark.pdf"

water_mark_page = PdfFileReader(water_mark).getPage(0)

pdf_reader = PdfFileReader(pdf_name)
pdf_writer = PdfFileWriter()

page_num = pdf_reader.getNumPages()
for i in range(page_num):
    page = pdf_reader.getPage(i)
    page.mergePage(water_mark_page)
    pdf_writer.addPage(page)

with open(new_pdf_name, "wb") as fo:
    pdf_writer.write(fo)

6.应用4:对PDF加密

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-19
# Name     : test04
# Software : PyCharm
# Note     : 使用PyPDF2模块对PDF文件加密
# 导入模块
from  PyPDF2 import PdfFileReader, PdfFileWriter

# pdf 文档
pdf_name = "test.pdf"
# 加密后的pdf 文档
new_pdf_name = "test_encryption.pdf"

pdf_reader = PdfFileReader(pdf_name)
pdf_writer = PdfFileWriter()

page_num = pdf_reader.getNumPages()
for i in range(page_num):
    page = pdf_reader.getPage(i)
    pdf_writer.addPage(page)

# 加密
pdf_writer.encrypt(user_pwd="mayi", use_128bit=True)

with open(new_pdf_name, "wb") as fo:
    pdf_writer.write(fo)

7.应用5:对PDF解密

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-19
# Name     : test05
# Software : PyCharm
# Note     : 使用PyPDF2模块对PDF文件解密
# 导入模块
from  PyPDF2 import PdfFileReader, PdfFileWriter

# pdf 文档
pdf_name = "test_encryption.pdf"
# 解密后的pdf 文档
new_pdf_name = "test.pdf"
# 密码
pass_word = "mayi"

pdf_reader = PdfFileReader(pdf_name)
# 解密
pdf_reader.decrypt(pass_word)
pdf_writer = PdfFileWriter()

page_num = pdf_reader.getNumPages()
for i in range(page_num):
    page = pdf_reader.getPage(i)
    pdf_writer.addPage(page)

with open(new_pdf_name, "wb") as fo:
    pdf_writer.write(fo)

8.应用6:获取PDF文件的基本信息

使用PyPDF2可以从PDF中提取到一些元数据和文本信息,对PDF有个大致了解。

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-19
# Name     : test06
# Software : PyCharm
# Note     : 使用PyPDF2模块获取PDF文件的基本信息
# 导入模块
from  PyPDF2 import PdfFileReader

# pdf 文档
pdf_name = "test.pdf"

with open(pdf_name, 'rb') as f:
    pdf = PdfFileReader(f)
    # 获取PDF文件的基本信息
    infomation = pdf.getDocumentInfo()

    # 作者
    author = infomation.author
    # 创建者
    creator = infomation.creator
    # 制作者
    producer = infomation.producer
    # Subject(主题)
    subject = infomation.subject
    # 标题
    title = infomation.title
    # 页数
    page_num = pdf.getNumPages()
    # 打印获取的基本信息
    print("作者:%s\t创建者:%s\t制作者:%s\t主题:%s\t标题:%s\t页数:%s" % (author, creator, producer, subject, title, page_num))

 

标签:name,Python,writer,PyPDF2,模块,PDF,pdf,page
From: https://www.cnblogs.com/mayi0312/p/16601136.html

相关文章

  • PYTHON实现倒三角打印
    目录需求数据展示最终结果实现效果代码原始版本1代码效率需求数据展示以空格分隔的990个数据最终结果实现效果代码发现我自己是真的喜欢暴力求解,当然昨天是因为有......
  • python常用函数
    内置函数range()从后往前遍历到0:foriinrange(length-1,-1,-1):先列再行:dp=[[0]*(len2+1)for_inrange(len1+1)]dp=[[0for_inrange(len2+1......
  • python常用开发函数-生成指定长度随机字符串
    通过random生成随机随机字符串方法一importrandomdefrandom_string(length:int)->str:"""length:指定随机字符串长度"""random_str=''......
  • PYTHON错误——多行输入
    1.问题描述:   给N行ipv7的地址,判断是否是合法的,如果是合法的输出其对应的十进制数,如果不合法输出-1。   输入(N行ip地址,N不清楚):1.0.0.0.0.0.00.0.0.0.0.0.......
  • MySQL之Navicat和pymysql模块
    Navicat可视化软件下载安装官网地址:http://www.navicat.com.cn/主要功能介绍1.可以创建、管理和维护数据库2.可以充当各种数据库软件的客户端,并且提供操作数据库的快......
  • 8/18 python基础学习
    第四章操作列表函数range(m,n)包含m-n的数,包括m,不包括n,左闭右开。range(m,n,d)d为步长。value**2其中**表示乘方。列表解析:[expressionforiter_valiniterab......
  • 学习:python pyecharts数据可视化
    pyecharts数据可视化pyecharts是一个用于生成Echarts图标的类库Echarts是百度开源的一个数据可视化的Js库用Echarts生成的图可视化效果非常棒 新版v1和老版本......
  • 学习:python 小试验 ruquest爬虫 爬取音乐
    控制台抓包获取音乐链接不多说了   最后成功下载到本地 ......
  • 学习:python pyEmail邮件处理
    pyEmail邮件处理客户端1--微信服务器---客户端2客户端1(网易)---网易邮箱服务器---QQ邮箱服务器----客户端2(QQ邮箱)邮箱协议:smtp协议imap协议pop协议  本次用126邮箱......
  • 用python进行数据分析(3)——误方差齐性检验
    众所周知,ols线性回归模型有一些基本假定。对残差e有以下性质E(e)=0;Var(e)=σ2(I-H)要服从正态分布且第i个残差的方差为:  称: ......