python PyPDF2处理PDF文件

  • 安装PyPDF2
pip install PyPDF2
  • 官方文档:

    • https://pypdf2.readthedocs.io/en/latest/
  • 导入模块
import PyPDF2

1. 读取PDF中的内容

# author:mlnt
# createdate:2022/8/16
import PyPDF2    # 导入PyPDF2模块# 官方文档:https://pypi.org/project/PyPDF2/
# 1.打开PDF文件
pdf = open(file='test.pdf', mode='rb')  # 以二进制方式打开# 2.获取PDF文件的页数
# 打开PDF文件成功后,可使用PdfFileReader()方法读取PDF内容
pdf_reader = PyPDF2.PdfFileReader(pdf)  # 读取PDF内容
print(f'PDF页数为:{pdf_reader.numPages}')
print(f'PDF页数为:{len(pdf_reader.pages)}')# 3.读取PDF页面内容
"""
- 使用PdfFileReader()方法读取PDF文件后,可使用getPage(n)(或pages[n])获取第n页的PDF内容
- PDF页面从第0页开始计算
- 页面内容被读入后,可使用extractText()取得该页的字符串内容
"""
for i in range(pdf_reader.numPages):pageObj = pdf_reader.getPage(i)  # 读取第i页内容# pageObj = pdf_reader.pages[i]  # 读取第i页内容page_content = pageObj.extractText()  # 提取页面内容print(page_content)

test.pdf:

读取效果:

2. PDF简单加密与解密

# author:mlnt
# createdate:2022/8/16import PyPDF2
from PyPDF2 import PdfReader, PdfWriterdef checkEncrypted(filename):"""检查文件是否加密"""pdfObj = open(file=filename, mode='rb')  # 以二进制方式打开pdfRd = PyPDF2.PdfFileReader(pdfObj)  # 读取PDF内容# 判断文件是否加密if pdfRd.isEncrypted:print(f'{filename}属于加密文件')else:print(f'{filename}未加密')def pdfEncrypt(filename):"""pdf加密"""reader = PdfReader(filename)  # 创建RdfReader对象writer = PdfWriter()  # 创建PdfWriter对象# 将所有页面添加到writerfor page in reader.pages:# PDF页面旋转page.rotate_clockwise(90)  # 旋转90度page.rotate_clockwise(-180)  # 逆时针旋转180度writer.add_page(page)# 添加密码writer.encrypt('123456')new_name = filename[:filename.rfind('.pdf')] + '-encrypted.pdf'# 保存pdfwith open(new_name, 'wb') as f:writer.write(f)def pdfDecrypt(filename):"""pdf解密"""reader = PdfReader(filename)writer = PdfWriter()# 判断是否加密if reader.isEncrypted:reader.decrypt('123456')for page in reader.pages:writer.add_page(page)new_name = filename[:filename.rfind('.pdf')] + '-decrypted.pdf'# 保存pdfwith open(new_name, 'wb') as f:writer.write(f)checkEncrypted('test.pdf')
pdfEncrypt('test.pdf')
pdfDecrypt('test-encrypted.pdf')

3. 合并PDF文件

# author:mlnt
# createdate:2022/8/16
from PyPDF2 import PdfMergermerger = PdfMerger()  # 创建PdfMerger对象pdf1 = open('test.pdf', 'rb')pdf2 = open('watermark.pdf', 'rb')# 将整个文档添加到merger
merger.append(fileobj=pdf1)# 将pdf2插入到merger,从第0页开始
merger.merge(position=0, fileobj=pdf2)with open('merger-test.pdf', 'wb') as f:merger.write(f)merger.close()

watermark.pdf:

合并效果:

4.处理PDF页面重叠

# author:mlnt
# createdate:2022/8/16
import PyPDF2
from PyPDF2 import PdfReader, PdfWriterreader1 = PdfReader('test.pdf')  # 创建RdfReader对象
reader2 = PdfReader('watermark.pdf')  # 创建RdfReader对象writer = PdfWriter()  # 创建PdfWriter对象# 将所有页面添加到writer
for page in reader1.pages:# 执行重叠合并page.merge_page(reader2.pages[0])# 添加到新的PDF对象writer.add_page(page)# 保存pdf
with open('test-watermark.pdf', 'wb') as f:writer.write(f)

效果:

5. 添加水印到pdf

from pathlib import Path
from typing import Union, Listfrom PyPDF2 import PdfWriter, PdfReader
from typing_extensions import Literaldef watermark(content_pdf: Path,watermark_pdf: Path,pdf_result: Path,page_indices: Union[Literal["ALL"], List[int]] = "ALL",
):"""添加水印:param content_pdf: 要添加水印的pdf文件:param watermark_pdf: 水印pdf:param pdf_result:  处理后保存的文件名:param page_indices: 页面目录:return:"""reader = PdfReader(content_pdf)if page_indices == "ALL":page_indices = list(range(0, len(reader.pages)))writer = PdfWriter()for index in page_indices:content_page = reader.pages[index]mediabox = content_page.mediabox# 读取水印pdf文件reader_watermark = PdfReader(watermark_pdf)# 获取水印pdf文件第1页的内容image_page = reader_watermark.pages[0]# 将两个页面的内容流合并为一个image_page.merge_page(content_page)image_page.mediabox = mediaboxwriter.add_page(image_page)# 保存处理后的内容with open(pdf_result, "wb") as fp:writer.write(fp)watermark(content_pdf='test.pdf', watermark_pdf='watermark.pdf', pdf_result='result.pdf')

效果:


参考:

  • 官方文档:https://pypdf2.readthedocs.io/en/latest/
  • https://www.cnblogs.com/yuminhu/p/15984340.html

python PyPDF2处理PDF文件相关推荐

  1. 【Python】用于在 Python 中处理 PDF 文件的 PyPDF2 库

    作者 | megha152 编译 | Flin 来源 | analyticsvidhya 介绍 PDF 代表便携式文档格式.它使用 .pdf 扩展名.这种类型的文件主要用于共享目的.它们不能被修改,从 ...

  2. 第19天---python办公自动化---操作PDF文件

    第19天-python办公自动化-操作PDF文件 在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它. pip install PyPDF2 读取PDF并抽 ...

  3. Python使操作PDF文件变得有趣

    大家好 我是毕加锁 (锁!) 大家在平时操作PDF文件时是不是感觉很枯燥 那么今天就教大家利用Python让操作PDF文件变得有趣起来  目录  工具  从PDF中提取文本  旋转和叠加页面  加密P ...

  4. PyPDF2读取PDF文件内容保存到本地TXT

    利用PyPDF2读取PDF文件内容保存到本地TXT from PyPDF2.pdf import PdfFileReader import pandas as pddef Pdf_to_txt(pdf ...

  5. python如何解析PDF文件

    python如何解析PDF文件 python中读取pdf的方法:使用python第三方库pdfminerk3k 1.使用pdfminer库 pdfminer是一个主流的分析pdf的库.如果是pytho ...

  6. Python办公自动化——提取pdf文件中表格并到Excel

    Python办公自动化--提取pdf文件中表格合并到Excel 需求描述 现有一 pdf 文件内容如下,文件中内容主要是表格形式的获奖名单,共158页.现要读取这些表格信息并保存到 excel 文件中 ...

  7. Python怎么将pdf转为图片?Python如何实现pdf文件转图片

    而pdf则是用来保存一些内容已经确定好的数据,因为pdf是无法直接修改内容的,所以也会经常将pdf转为图片来保存.本文就将会来介绍一下pdf转图片的方法,往下看看吧. 1.pdf转图片的话主要实现所需 ...

  8. python合并pdf 加书签_使用Python批量合并PDF文件(带书签功能)

    1 #!/usr/bin/env python3 2 #-*- coding: utf-8 -*- 3 ''' 4 #文件名:pdfmerge.py5 本脚本用来合并pdf文件,输出的pdf文件按输入 ...

  9. 【Python】如何用Python来操作PDF文件,建议收藏

    今天这篇文章,我们不谈热点,毕竟最近谈论的热点有点多了,也有点腻了,我们来讲一些Python运用实践当中的小技巧,用Python来操作和处理PDF文件,通过本篇文章,读者朋友大概会学会 1. 通过Py ...

最新文章

  1. 亿级流量架构之服务器扩容思路及问题分析
  2. java设计模式---调停者模式
  3. selenium3 调用IE Unable to get browser
  4. pycharm导入本地py文件时,模块下方出现红色波浪线时如何解决
  5. 【深度学习】我用 PyTorch 复现了 LeNet-5 神经网络(CIFAR10 数据集篇)!
  6. 最常用的设计模式---适配器模式(C++实现)
  7. Android系统--Binder系统具体框架分析(一)补充
  8. 机器学习之线性代数总结
  9. mac共享文件夹 linux,一文搞定 Linux,Mac,Windows 的 NFS 网络文件共享服务部署
  10. 【java】变量的应用
  11. CSS3中的过渡、动画和变换
  12. 01我为什么学Unity3d
  13. 高斯克吕格投影中有关带号与经度的关系
  14. 微信开通检测工具使用小诀窍
  15. java 对session的基本使用
  16. ps去水印教程_图片如何用PS去水印?ps去水印教程,让你1秒学会!
  17. IMF传奇行动第85课:Spark Streaming第四课:基于HDFS的Spark Streaming案例实战和内幕源码解密
  18. 【View基础知识】TouchSlop、VelocityTracker、GestureDetector、Scroller
  19. 华为手机灵敏度设置_华为调屏幕灵敏度设置方法
  20. 数据中台架构体系浅析

热门文章

  1. layer添加元素 openlayer_OpenLayers 官网例子的中文详解
  2. linux日志切割命令,linux日志分割、去重、统计
  3. 【MT4 Client API 服务器直连接口】接口介绍
  4. 欲登千层楼,又何惧寒风
  5. 安信证券 | 神州信息:金融软服增长较快,行业信创蓄势待发
  6. 摆渡服务器装什么系统,昆明证券数据摆渡平台
  7. 微信小程序时间显示几分钟前、几小时前、几天前....
  8. win7识别到移动硬盘,但不显示盘符解决办法
  9. Minecraft 1.12.2模组开发(十九) 自定义3D物品模型
  10. 小米3的卡槽,卡住了