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

PDF文件转换之输出指定页到新的 PDF 文件

背景

一份 PDF 学习资料需要打印其中某几页,文件有几百兆,看到 WPS 有PDF拆分功能,但是需要会员,开了一个月会员后完成了转换。突然想到,会员到期后如果还要拆解的话,怎么办呢?PDF 文件拆解功能,自己写一个呗。

输入需求

Python 实现对 PDF从截取某几页的功能

根据输出的方案,拷贝代码到 PyCharm 编辑器:

from PyPDF2 import PdfFileWriter, PdfFileReaderdef extract_pages(input_pdf_path, output_pdf_path, start_page, end_page):"""从PDF文件中截取指定页码范围的页面,并保存为新的PDF文件。:param input_pdf_path: 输入PDF文件路径:param output_pdf_path: 输出PDF文件路径:param start_page: 开始页码(从0开始):param end_page: 结束页码(不包含该页)"""# 创建PdfFileWriter对象output = PdfFileWriter()# 打开输入PDF文件with open(input_pdf_path, "rb") as input_pdf_file:pdf_file = PdfFileReader(input_pdf_file)pdf_pages_len = pdf_file.getNumPages()# 检查页码范围是否有效if start_page < 0 or end_page > pdf_pages_len or start_page >= end_page:raise ValueError("无效的页码范围")# 添加指定页码范围的页面到输出文件for i in range(start_page, end_page):output.addPage(pdf_file.getPage(i))# 保存输出文件with open(output_pdf_path, "wb") as output_pdf_file:output.write(output_pdf_file)# 示例调用
input_pdf_path = "input.pdf"
output_pdf_path = "output.pdf"
start_page = 0  # 从第一页开始(页码从0开始)
end_page = 5    # 截止到第5页(不包含第5页)extract_pages(input_pdf_path, output_pdf_path, start_page, end_page)

依赖安装及运行

第一步,执行命令pip install PyPDF2 完成依赖的安装。

第二步,修改 input_pdf_path 、output_pdf_path 及页码信息。

第三步,执行脚本,有报错:

  1. PdfFileWriter is deprecated and was removed in PyPDF2 3.0.0. Use PdfWriter instead.
  2. PdfFileReader is deprecated and was removed in PyPDF2 3.0.0. Use PdfReader instead.
  3. reader.getNumPages is deprecated and was removed in PyPDF2 3.0.0. Use len(reader.pages) instead.
  4. reader.getPage(pageNumber) is deprecated and was removed in PyPDF2 3.0.0. Use reader.pages[page_number] instead.
  5. addPage is deprecated and was removed in PyPDF2 3.0.0. Use add_page instead.

按照提示,修改废弃方法为最新方法后的代码如下:

from PyPDF2 import PdfWriter, PdfReaderdef extract_pages(input_pdf_path, output_pdf_path, start_page, end_page):"""从PDF文件中截取指定页码范围的页面,并保存为新的PDF文件。:param input_pdf_path: 输入PDF文件路径:param output_pdf_path: 输出PDF文件路径:param start_page: 开始页码(从0开始):param end_page: 结束页码(不包含该页)"""# 创建PdfWriter对象output = PdfWriter()# 打开输入PDF文件with open(input_pdf_path, "rb") as input_pdf_file:pdf_file = PdfReader(input_pdf_file)pdf_pages_len = len(pdf_file.pages)# 检查页码范围是否有效if start_page < 0 or end_page > pdf_pages_len or start_page >= end_page:raise ValueError("无效的页码范围")# 添加指定页码范围的页面到输出文件for i in range(start_page, end_page):output.add_page(pdf_file.pages[i])# 保存输出文件with open(output_pdf_path, "wb") as output_pdf_file:output.write(output_pdf_file)# 示例调用
input_pdf_path = "/Applications/2022MyTextFiles/A.pdf"
output_pdf_path = "/Applications/2022MyTextFiles/B.pdf"
start_page = 0  # 从第一页开始(页码从0开始)
end_page = 5  # 截止到第5页(不包含第5页)extract_pages(input_pdf_path, output_pdf_path, start_page, end_page)

运行正常,搞定了!

白开了一个月的会员啊!

http://www.dtcms.com/a/222475.html

相关文章:

  • 封装一个Qt调用动态库的类
  • 【C++】位图
  • QPS 和 TPS 详解
  • 理想树图书:以科技赋能教育,开启AI时代自主学习新范式
  • spring切面
  • 三格电子——如何解决消防设备联网问题
  • C#实现图片缩略图生成:多种模式详解与实践
  • 3. JavaScript基础:自增自减、运算符优先级、条件语句、循环与错误处理
  • 帕金森常见情况解读
  • 【GESP真题解析】第 18 集 GESP 二级 2024 年 12 月编程题 1:寻找数字
  • 【面试 - 遇到的问题 - 优化 - 地图】腾讯地图轨迹回放 - 回放的轨迹时间要和现实时间对应(非匀速)
  • `docker commit` 和 `docker save`区别
  • JavaScript极致性能优化全攻略
  • Linux服务器运维10个基础命令
  • 一文读懂 STP:交换机接口状态详解及工作原理
  • 探讨分贝计在医疗环境中的具体应用及其重要性
  • Docker环境构建:MySQL 双主四从集群
  • SAP Business ByDesign:无锡哲讯科技赋能中大型企业云端数字化转型
  • 8位单通道数据保存为JPG
  • WSL里执行python深度学习的一些方法记录
  • 北京大学肖臻老师《区块链技术与应用》公开课:05-BTC-实现
  • windows无法安装到这个磁盘,选中的磁盘采用gpt分区仪式
  • 研华工控机安装Windows10系统,适用UEFI(GPT)格式安装
  • 烟草工业数字化转型:科技领航,重塑传统产业新生态
  • CppCon 2014 学习:Making C++ Code Beautiful
  • Linux中的shell脚本
  • 【Dockerfile 完全参数化的通用 APT 源配置方案】
  • 【Python】yield from 功能解析
  • 模块化设计,static和extern(面试题常见)
  • 互联网大厂Java求职面试:云原生微服务架构设计与AI大模型集成实战