当前位置: 首页 > news >正文

PDF文件切割,无大小限制

前言

公司让学习一个东西,让写一个学习总结,我想这不是AI的拿手好戏,直接把近100M的PDF喂给他,然后他说吃不下,太大了

小事,那么多在线PDF工具网站,分分钟拆开,然后找了半天也都是有大小限制,不是20M就是50M,要不然就是下了软件还要开会员,搞烦的,自己写一个把

准备环境

1.python
2.pdf库 pip install PyPDF2==3.0.1
版本要注意一下,低版本的一些语法和下文代码可能对不上

配置

首先要按章节拆分出来,定义一个配置文件,比如第1章内容是从 第10页到20页拆成一个文件
这里要注意的是页码并不是PDF的右下角的页码,是整个文件第几页的含义,可以用Edge打开PDF,上面就有显示当前是第几页

我拆除下面的三个章节

154, 174
175, 205
206, 250

代码

import PyPDF2  
import sys  
import os  def split_specific_pages_to_pdf(input_pdf_path, output_pdf_path, start_page, end_page):  # 打开输入的 PDF 文件  with open(input_pdf_path, "rb") as input_pdf_file:  # 创建一个 PdfReader 对象  pdf_reader = PyPDF2.PdfReader(input_pdf_file)  # 确保请求的页面范围在PDF文件的页数范围内  if start_page < 1 or end_page > len(pdf_reader.pages) or start_page > end_page:  raise ValueError("无效的页面范围")  # 创建一个 PdfFileWriter 对象  pdf_writer = PyPDF2.PdfWriter()  # 遍历选定的页面  for page_number in range(start_page - 1, end_page):  # 注意这里的range起始值需要调整为start_page - 1  # 将当前页添加到 PdfWriter 对象  pdf_writer.add_page(pdf_reader.pages[page_number])  # 将所有选定页面写入新的 PDF 文件  with open(output_pdf_path, "wb") as output_pdf_file:  pdf_writer.write(output_pdf_file)  print(f"已保存: {output_pdf_path}")  if len(sys.argv) > 1:  input_pdf_path = sys.argv[1]
else:  print("没有传入额外的参数")sys.exit()if not os.path.isfile("config.txt"):print("配置文件不存在")sys.exit()with open('config.txt', 'r') as file: for line in file:  start, end = line.strip().split(',')start = int(start)end = int(end)split_specific_pages_to_pdf(input_pdf_path, f"file-{start}-{end}.pdf", start, end)

然后把配置文件、代码、PDF文件放在一个目录就可以了

python main.py xxxx.pdf
在这里插入图片描述
在这里插入图片描述

打包exe

功能确认的一般我喜欢打包成exe

pyinstaller --clean -w -F -i ico.ico --name=PDF文件切割.exe main.py

只需要把pdf拖到exe上就可以,不想写代码的话可以私信我exe
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WPF中的XAML是如何转换成对象的?
  • react面试题一
  • Vue实现表格数据的增删改查
  • 死锁如何产生及避免
  • 【计算机三级-数据库技术】操作题大题(第六套)
  • python数组列表操作简记二
  • MS SQL Server partition by 函数实战二 编排考场人员
  • 提升录制效率,这些录屏软件快捷键你不可不知
  • 【C++ 面试 - 面向对象】每日 3 题(十)
  • 加速边缘智能技术落地!移远通信推出全功能ARM主板QSM560DR、QSM668SR系列
  • Midjourney推出网页版编辑器应对Ideogram 2.0冲击
  • 【ACL2024】基于长尾检索知识增强的大语言模型
  • nginxlvshaproxy负载均衡的区别
  • android 实战开发之Java 中生成从 1 到 3 的随机数
  • shell脚本(1)--一键启动zookeeper
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Angular数据绑定机制
  • Docker: 容器互访的三种方式
  • EOS是什么
  • iOS | NSProxy
  • Joomla 2.x, 3.x useful code cheatsheet
  • Wamp集成环境 添加PHP的新版本
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 从0到1:PostCSS 插件开发最佳实践
  • 搭建gitbook 和 访问权限认证
  • 机器学习 vs. 深度学习
  • 开源地图数据可视化库——mapnik
  • 排序算法之--选择排序
  • 区块链将重新定义世界
  • 使用 @font-face
  • 听说你叫Java(二)–Servlet请求
  • 推荐一个React的管理后台框架
  • postgresql行列转换函数
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • "无招胜有招"nbsp;史上最全的互…
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #Linux(帮助手册)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (LeetCode) T14. Longest Common Prefix
  • (Oracle)SQL优化技巧(一):分页查询
  • (poj1.2.1)1970(筛选法模拟)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三)elasticsearch 源码之启动流程分析
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))