最近在看长篇的英文pdf,先喂给大模型给翻译一下,这样读起来比较快。但是上传全部的pdf文档给大模型又感觉太浪费token,所以有了截取其中某些页的需求。很早之前写过java版本的,最近用python写代码多,懒得找java的那个了。所以就写了一个python版本的。不写不知道,一写还有点小成就,分享给大家,装个python3的环境,复制运行就好。最终效果图如下:
二、Python中的操作PDF库
Python用于处理PDF文件的库比较多,每个库都有其独特的功能和特点,下面为大家介绍几个比较常见的:
1. PyPDF2
这是一个功能较为全面的PDF处理库,可以实现诸如读取、合并、分割、添加水印等多种操作,对于截取PDF指定页数也提供了相应的方法。不过,在使用过程中可能会遇到一些兼容性问题,尤其是在处理一些加密或者格式较为特殊的PDF文件时。
2. PyPDF4
它是PyPDF2的一个分支版本,在原有的基础上进行了改进和修复,增强了对不同PDF格式的兼容性,并且在性能上也有所提升。它提供了简洁明了的API,使得我们可以方便地通过几行代码实现PDF指定页数的截取,这也是我们接下来会重点介绍的库之一。
3. pikepdf
这个库的优势在于它能够很好地处理带有权限限制的PDF文件。有些PDF文件可能设置了禁止打印、禁止复制等权限,而pikepdf可以绕过这些限制,让我们能够对其进行正常的操作,包括截取指定页数等。
4. ReportLab
主要侧重于创建和编辑PDF文件,虽然也可以实现一定程度的读取和修改操作,但相较于前面几个专门用于PDF处理的库,在截取指定页数这类需求上使用起来相对复杂一些,更多地是用于生成全新的PDF文档内容。
三、选择PyPDF4简单实现各命令行的
安装PyPDF4
我也没考虑多,看着每个库都差不多吧,毕竟我的实现比较简单,选了PyPDF4。可以通过以下命令使用pip进行安装:
pip install PyPDF4
截取指定页数的示例代码
下面是一个简单的示例,展示了如何使用PyPDF4从一个PDF文件中截取指定的页数并保存为一个新的PDF文件:
import os
from PyPDF4 import PdfFileReader, PdfFileWriterdef extract_pages(input_path, output_path, start_page, end_page):"""从PDF中提取指定范围的页面并保存为新文件:param input_path: 输入PDF文件路径:param output_path: 输出PDF文件路径:param start_page: 开始页码(从0开始):param end_page: 结束页码(包含)"""try:# 读取输入PDFpdf_reader = PdfFileReader(open(input_path, "rb"))# 创建写入对象pdf_writer = PdfFileWriter()# 验证页码范围if start_page < 0 or end_page >= pdf_reader.getNumPages():raise ValueError("页码超出范围")# 添加指定页面for page_num in range(start_page, end_page + 1):page = pdf_reader.getPage(page_num)pdf_writer.addPage(page)# 写入输出文件with open(output_path, "wb") as out:pdf_writer.write(out)print(f"成功提取第{start_page}-{end_page}页到{output_path}")except Exception as e:print(f"发生错误: {str(e)}")extract_pages(r"C:/Users/DELL/Downloads/xx.pdf", r"C:/Users/DELL/Downloads/xx-1.pdf", 1, 10) # 改成你的地址就可以了
在上述代码中:
- 首先我们导入了
PdfFileReader
和PdfFileWriter
这两个主要的类,分别用于读取原始PDF文件和创建新的PDF文件来保存截取后的页面。 - 然后定义了
extract_pages
函数,它接受输入PDF文件路径、输出PDF文件路径以及要截取的页数列表作为参数。 - 在函数内部,我们通过循环遍历要截取的页数列表,从原始PDF文件中获取对应的页面,并添加到新创建的PDF文件中。
- 最后,将新的PDF文件保存到指定的输出路径。
你可以根据自己的实际需求修改输入和输出路径以及要截取的页数列表,轻松实现PDF指定页数的截取操作。
四、选择tkinter实现各对话框的
感觉每次输入参数都比较麻烦,用Python的 tkinter
库可以帮助我们快速实现这样一个简单的图形化对话框应用程序。tkinter
库是默认安装的。
示例代码实现图形化对话框
修改上面的代码, tkinter
和 PyPDF4
的示例代码,用于创建一个简单的图形化界面来实现PDF指定页数截取的功能:
import os
from PyPDF4 import PdfFileReader, PdfFileWriter
import tkinter as tk
from tkinter import filedialog, messageboxdef select_pdf_file():file_path = filedialog.askopenfilename(filetypes=[("PDF files", "*.pdf")])if file_path:entry_file_path.delete(0, tk.END)entry_file_path.insert(0, file_path)def _extract_pages(input_path, output_path, start_page, end_page):"""从PDF中提取指定范围的页面并保存为新文件:param input_path: 输入PDF文件路径:param output_path: 输出PDF文件路径:param start_page: 开始页码(从0开始):param end_page: 结束页码(包含)"""try:# 读取输入PDFpdf_reader = PdfFileReader<