用PyPDF2库对pdf文件进行操作

目录

  • 基本原理与基础语句
    • PdfReader类
    • PdfWriter类
    • 文件写入
  • 对pdf文件进行插入操作
  • 对pdf文件进行删除页操作
  • 对pdf文件进行分割操作

基本原理与基础语句

PdfReader类

pdf_file = PyPDF2.PdfReader(filenmae)
通过PdfReader函数可以读取pdf文件并生成一个PdfReader类

该类具有以下重要属性:
pages:读取该类的页面列表,每个页面为一个Page对象,可以通过对该属性进行索引得到不同页面对象,也可以对其使用len函数统计该pdf文件的页数

PdfWriter类

pdf_file = PyPDF2.PdfWriter()
通过PdfWriter函数可以生成一个用于写入的空白PdfWriter类

该类具有以下重要方法:
1、增加页面方法:
add_page(page)
page:Page对象

2、插入页面方法:
insert_page(page, index)
page:Page对象
index:插入的页码,在本页之后插入

文件写入

with open(pdf_file, "wb") as f:pdf_file.write(f)

其中pdf_file是PdfWriter类

对pdf文件进行插入操作

import PyPDF2def insert_pdf(input_pdf, insert_pdf, output_pdf, insert_page):'''input_pdf:需要插入的pdf文件名insert_pdf:用于插入的padf文件名output_pdf:新生成的pdf文件名insert_page:在insert_page这一页之后插入,insert_page从1开始'''input_pdf = PyPDF2.PdfReader(input_pdf)insert_pdf_list = []for i in insert_pdf:insert_pdf_list.append(PyPDF2.PdfReader(i))output_file = PyPDF2.PdfWriter()for i in range(0, len(input_pdf.pages)):output_file.add_page(input_pdf.pages[i])num = 0for i in range(len(insert_page)):for j in range(0, len(insert_pdf_list[i].pages)):output_file.insert_page(insert_pdf_list[i].pages[j], int(num + insert_page[i] + j))num += len(insert_pdf_list[i].pages)with open(output_pdf, "wb") as f:output_file.write(f)return Noneinsert_pdf(file0,[file1, file2, file3],new_file,[index1, index2, index3])

对pdf文件进行删除页操作

import PyPDF2def delete_pdf(input_pdf, output_pdf, delete_page):'''input_pdf:用于操作的pdf文件名outpupt_pdf:新生成的pdf文件名delete_page:从1开始,将当前页面删除'''input_pdf = PyPDF2.PdfReader(input_pdf)for i in range(len(delete_page)):delete_page[i] -= 1output_file = PyPDF2.PdfWriter()for i in range(0, len(input_pdf.pages)):if not i in delete_page:output_file.add_page(input_pdf.pages[i])with open(output_pdf, "wb") as f:output_file.write(f)return Nonedelete_pdf(file0,new_file,[index1, index2])

对pdf文件进行分割操作

import PyPDF2def split_pdf(input_pdf, output_pdf_list, split_page):'''input_pdf:用于操作的pdf文件名output_pdf_list:新生成的pdf文件名列表split_page:在split_page这一页之后分割,split_page从1开始'''input_pdf = PyPDF2.PdfReader(input_pdf)split_page = [0] + split_page + [len(input_pdf.pages)]for i in range(len(split_page)-1):output_file = PyPDF2.PdfWriter()for j in range(split_page[i], split_page[i+1]):output_file.add_page(input_pdf.pages[j])with open(output_pdf_list[i], "wb") as f:output_file.write(f)return Nonesplit_pdf(file0,[new_file1, new_file2, new_fil3, new_file4],[index1, index2, index3])

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

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

相关文章

C++11中的右值引用以及移动构造等

目录 一、右值引用 1.左值引用和右值引用 2.左值引用与右值引用比较 3.右值引用使用场景和意义 1️⃣ 传返回值 2️⃣ STL中的应用 4.完美转发 模板中的&& 万能引用(引用折叠) 二、 新的类功能 1.默认成员函数 2.类成员变量初始化 3.…

线程池学习(一)

1.线程池有什么作用 降低资源消耗:通过池化技术重复利⽤已创建的线程,降低线程创建和销毁造成的损耗。 提⾼响应速度:任务到达时,⽆需等待线程创建即可⽴即执⾏。 提⾼线程的可管理性:线程是稀缺资源,如果…

ProxmoxPVE虚拟化平台--安装PVE虚拟机

Proxmox 虚拟机 Proxmox是一个基于Debian Linux和KVM的虚拟化平台,‌它提供了虚拟化的环境,‌允许用户在同一台物理机上运行多个虚拟机。‌Proxmox虚拟环境(‌PVE)‌是一个开源项目,‌由Proxmox Server Solutions Gmb…

【复读EffectiveC++23】条款23:宁以 non-member、non-friend替换member函数

条款23:宁以 non-member、non-friend替换member函数 这是C设计的一个基本原则,主要目的是减少面向对象设计中的耦合,提高软件的内聚性和可复用性。non-member、non-friend函数可以不受类内部实现的影响,因此更加灵活和可复用。 …

Power Tower

Problem - D - Codeforces 牛客和codeforce都有 递归处理l,r,终点是lr && mod1 用扩展欧拉定理 // Problem: D. Power Tower // Contest: Codeforces - Codeforces Round 454 (Div. 1, based on Technocup 2018 Elimination Round 4) // URL: https://c…

学习HTML、CSS和JavaScript的完整路线指南

第一步&#xff1a;理解基础概念 HTML基础 HTML简介和结构 什么是HTML&#xff1f;它在Web开发中的角色。HTML文档的基本结构&#xff1a;<!DOCTYPE>, <html>, <head>, <body>等标签的作用和使用方法。 常用HTML元素 文本相关&#xff1a;段落 <p&g…

【Socket 编程】应用层自定义协议与序列化

文章目录 再谈协议序列化和反序列化理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议网络计算器序列化和反序列化 再谈协议 协议就是约定&#xff0c;协议的内容就是约定好的某种结构化数据。比如&#xff0c;我们要实现一个网络版的计算器&#xff0c;客户端…

【logstash】logstash使用多个子配置文件

这里有个误区在pipelines.yml中写conf.d/*&#xff0c;实测会有问题&#xff0c;不同的filter处理逻辑会复用。 现在有两个从kafka采集日志的配置文件&#xff1a;from_kafka1.conf&#xff0c;from_kafka2.conf 修改pipelines.yml配置文件 config/pipelines.yml- pipeline.i…

关于P2P(点对点)

P2P 是一种客户端与客户端之间&#xff0c;点对点连接的技术&#xff0c;在早前的客户端都是公网IP&#xff0c;没有NAT的情况下&#xff0c;P2P是较为容易实现的。 但现在的P2P&#xff0c;实现上面会略微有一些复杂&#xff1a;需要采取UDP打洞的技术&#xff0c;但UDP打出来…

asp.net mvc 三层架构开发商城系统需要前台页面代完善

一般会后端开发&#xff0c;都不太想写前台界面&#xff0c;这套系统做完本来想开源&#xff0c;需要前台界面&#xff0c;后台已开发&#xff0c;有需求的朋友&#xff0c;可以开发个前端界面完善一下&#xff0c;有的话可以私聊发给我啊

python_使用多进程来处理数据写入Excel文件_multiprocessing.Process

python_使用多进程来处理数据写入Excel文件 优势&#xff1a;与多线程相比&#xff0c;多进程写入速度要更快&#xff0c;12万多行数据处理用时3.52秒&#xff0c;比多进程快了1秒左右。 import pandas as pd from io import BytesIO import multiprocessing import time impor…

Spring源码-AOP

1、spring aop和aspectJ什么关系&#xff1f; aop是编程思想&#xff0c;spring aop被aspectJ都是aop思想的具体实现。spring aop为了不重复造轮子&#xff0c;通过一定的取舍选取了aspectJ中适合自己的注解。spring初期版本的aop只支持通过实现aop接口的方式来实现切面增强&a…

Nginx 最常用的命令

目录 一、Nginx 安装与配置 1.1 下载与安装 1.2 配置文件 二、Nginx 基本操作 2.1 启动与停止 2.2 重启与重新加载 三、日志管理 3.1 访问日志 3.2 错误日志 四、虚拟主机管理 4.1 配置虚拟主机 4.2 管理虚拟主机 五、性能优化 5.1 缓存配置 5.2 连接优化 Nginx…

Redis(三)

1. java连接redis java提高连接redis的方式jedis. 我们需要遵循jedis协议。 引入依赖 <!--引入java连接redis的驱动--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.1</version&g…

Android Framework 之AMS

它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。 它除了管理四大组件外&#xff0c;同时也负责管理和调度所有的进程 AMS相关目录结构 AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下)&#xff1a; frameworks/base/core/java/andro…

记录|LabVIEW从0开始

目录 前言一、表达式节点和公式节点二、脚本与公式2.1 公式 三、Excel表格3.1 位置3.2 案例&#xff1a;波形值存入Excel表中3.3 案例&#xff1a;行写入&#xff0c;列写入 四、时间格式化4.1 获取当前时间4.2 对当前时间进行格式化 更新时间 前言 参考视频&#xff1a; LabVI…

【STL】之 vector 使用方法及模拟实现

前言&#xff1a; 本文主要讲在C STL库中vector容器的使用方法和底层的模拟实现~ 成员变量的定义&#xff1a; 对于vector容器&#xff0c;我们首先采用三个成员变量去进行定义&#xff0c;分别是&#xff1a; private:iterator _start; // 指向数据块的开始iterator _finish…

React类组件生命周期与this关键字

类组件生命周期 参考链接 一图胜千言&#xff08;不常用的生命周期函数已隐藏&#xff09; 代码&#xff1a; //CC1.js import { Component } from "react";export default class CC1 extends Component {constructor(props) {super(props);console.log("con…

【Vue3】watchEffect

【Vue3】watchEffect 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日子。本文…

【代码随想录第37天| 完全背包,518. 零钱兑换 II ,377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)】

完全背包 完全背包中&#xff0c;每件物品都有无数件&#xff1b;这主要影响了遍历背包容量时的遍历顺序&#xff0c;应该从小到大去遍历&#xff0c;这样才能包括有多件相同物品的情况。 思路 先遍历物品&#xff0c;再遍历背包 for(int i 0; i < weight.size(); i) {…