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

news2024/12/25 19:19:48

目录

读取内容

合并文件

旋转 

缩放

裁剪

加密和解密

添加水印


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

读取内容

from PyPDF2 import PdfReader, PdfMerger, PdfWriter

def 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())  # 读取内容

合并文件

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()

旋转 

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()

缩放

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()

裁剪

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()

加密和解密

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的功能用来合并页面,可找一个只有水印的空白页,作为合并对象

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()

其他方法

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【magic-dash】01:magic-dash创建单页面应用及二次开发

文章目录 一、magic-dash是什么1.1 安装1.2 使用1.2.1 查看内置项目模板1.2.2 生成指定项目模板1.2.3 查看当前magic-dash版本1.2.4 查看命令说明1.2.5 内置模板列表二、创建虚拟环境并安装magic-dash三、magic-dash单页工具应用开发3.1 创建单页面项目3.1.1 使用命令行创建单页…

重温设计模式--原型模式

文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式,它的主要…

Kibana8.17.0在mac上的安装

1、Kibana是什么 Kibana是与elasticsearch配套使用的数据分析与可视化工具,通过Kibana可以轻松与es中存储的数据进行高效的交互,包括数据写入、检索、删除等操作,并可以通过编写部分代码将数据做成各种报表,从而进行非常直观的统…

61.基于SpringBoot + Vue实现的前后端分离-在线动漫信息平台(项目+论文)

项目介绍 随着社会互联网技术的快速发展,每个行业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于在线动漫信息平台当然也不能排除在外,随着网络技术的不断成熟,带动了在线动漫信息平台,它彻底…

【python】银行客户流失预测预处理部分,独热编码·标签编码·数据离散化处理·数据筛选·数据分割

数据预处理 通过网盘分享的文件:银行流失预测数据和代码 链接: https://pan.baidu.com/s/1loiB8rMvZArfjJccu4KW6w?pwdpfcs 提取码: pfcs 非数值特征处理 目的:将非数值特征转换为数值型,以便模型能够处理。方法: 地理位置&am…

从零开始使用MaxKB打造本地大语言模型智能问答系统与远程交互

文章目录 前言1. 下载运行Ollama2. 安装大语言模型3. 安装Cpolar工具4. 配置公网地址5. 固定公网地址6. MaxKB 添加Olama7.创建问答应用 前言 目前大语言模型(LLM)已经成为了人工智能领域的一颗璀璨明星,从自然语言处理到智能问答系统&#…

neo4j无法导入csv文件

文章目录 问题解决方案1. 检查Neo4j的neo4j.conf配置文件2. 确保文件路径正确3. 将CSV文件放置到import目录4. 重启Neo4j服务器 问题 neo4j browser中导入csv文件报错无法导入 具体:输入下列语句LOAD CSV WITH HEADERS FROM “file:///D:/KG/relation.csv” AS lin…

WebLogic T3反序列化漏洞(CVE-2018-2628)--vulhub

WebLogic T3反序列化漏洞(CVE-2018-2628) WebLogic在通信过程中使用T3协议传输数据,涉及到了序列化和反序列化操作。 T3协议概述 T3协议是Oracle的私有协议,所以公开的相关资料比较少,这里结合其他师傅的博客简单对T3协议进行一个简要分析…

在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南

在人工智能和计算机视觉领域,人体姿态估计是一项极具挑战性的任务,它对于理解人类行为、增强人机交互等方面具有重要意义。YOLOv8Pose作为YOLO系列中的新成员,以其高效和准确性在人体姿态估计任务中脱颖而出。本文将详细介绍如何在瑞芯微RK3588平台上,使用RKNN(Rockchip N…

scala借阅图书保存记录(三)

BookDAO package org.app package daoimport models.BookModelimport scala.collection.mutable.ListBuffer//图书,数据操作 class BookDAO {//加载图书,从文件中读入def loadBooks(): ListBuffer[BookModel] {val books new ListBuffer[BookModel]()…

无标记动作捕捉系统如何赋能体育运动分析,推动体育科学发展?

随着技术的不断发展与社会的需要,健康、科学运动成为了大众关注的一个热词。在韩国首尔的中央大学,其生物运动临床康复实验室和运动训练中心就致力于通过生物力学分析来研究与运动相关的伤害,并通过定制科学的训练计划来帮助运动员改进他们的…

Unittest02|TestSuite、TestRunner、HTMLTestRunner、处理excel表数据、邮件接收测试结果

目录 八、测试套件TestSuite和测试运行器TestRunner 1、基本概念 2、创建和使用测试套件 3、 自动发现测试用例、创建测试套件、运行测试 4、生成html的测试报告:HTMLTestRunner 1️⃣导入HTMLTestRunner模块 2️⃣运行测试用例并生成html文件 九、unittest…

[搜广推]王树森推荐系统笔记——曝光过滤 Bloom Filter

曝光过滤 & Bloom Filter 曝光过滤主要在召回阶段做,主要方法是Bloom Filter 曝光过滤问题 -如果用户看过某个物品,则不再把该物品曝光给该用户。 - 原因是重复曝光同一个物品会损害用户体验 - 但长视频通常没有曝光过滤(youtube&…

JS CSS HTML 的代码如何快速封装

我们为什么要封装代码,是因为封装后的代码,会显得非常美观,减少代码的复用,方便我们更好的去维护代码,不用一个一个页面的去找去改,直接封装好的代码里面去改就可以了 目录 1.html代码封装 2.CSS代码封装 …

acme ssl证书自动续签 nginx

参考 github 官方操作 ,acme操作说明 说下我的操作 安装 acme.sh curl https://get.acme.sh | sh source ~/.bashrc 2.注册 acme.sh --register-account -m 123qq.com 如果你在配置 acme.sh 时选择了其他 CA(如 Let’s Encrypt)&#xff…

【专题】2024抖音电商母婴行业分析报告汇总PDF洞察(附原数据表)

原文链接:https://tecdat.cn/?p38651 在数字化浪潮的席卷下,抖音电商母婴行业正经历着深刻变革。当下,年轻一代父母崛起,特别是 24 至 30 岁以及 18 至 23 岁的群体成为抖音母婴行业兴趣人群的主力军。他们带来全新育儿理念&…

设计模式之 abstract factory

适用场景 一个系统要独立于它的产品的创建、组合和表示时。一个系统要由多个产品系列中的一个来配置时。当你要强调一系列相关的产品对象的设计以便进行联合使用时。当你提供一个产品类库,而只想显示它们的接口而不是实现时 架构演示 首先client这个东西可以接触到…

UE5仿漫威争锋灵蝶冲刺技能

这两天玩了一下漫威争锋Marvel Rivals,发现是UE5做的,对里面一些角色技能挺感兴趣的,想简单复刻一下技能功能,顺便复习一下学过的知识 首先把摄像机设置调整一下 CameraBoom里搜索lag 把摄像机延迟关掉 ,这样摄像机就…

尼伽OLED赋能中国移动,打造移动AI数字人透明显示屏

随着人工智能和显示技术的不断进步,中国移动紧跟科技潮流,将移动AI数字人技术与透明屏完美结合,为用户带来了前所未有的智能交互体验。基于中国移动九天大模型生成的数字人小天,便是这一创新技术的典型代表。它不仅能够实现定点播…

goview——vue3+vite——数据大屏配置系统

低代码数据大屏配置系统: 数据来源是可以动态api配置的: 配置上面的api接口后,在数据过滤中进行数据格式的转化。 以上内容,来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下,需要更改…