前言
在一些情况下,如将一些论文从电子书籍中单独拿出来,这个时候就需要将PDF拆分。还有很多其他的情况。但是目前WPS的拆分功能是需要VIP的,这是十分头疼的。
方法
准备工作
- 电脑上安装好Python运行环境
- 使用如下命令安装好pymupdf库
python -m pip install --upgrade pymupdf
库说明
PyMuPDF是一个轻量级PDF,XPS和电子书查看器,渲染器和工具包,它可以很方便地对PDF进行操作,包括增加页数,删除页数,修改内容,查看内容等。
官网在这里
代码
import fitz
def split(doc, from_pa, to_pa):
Doc=doc[0:-4]
# 打开源PDF
doc=fitz.open(doc)
# print(doc.page_count)
# 我们要保存到的PDF文件
DOC = fitz.open()
# 将doc的from_pa至to_pa页的内容复制到DOC中
DOC.insert_pdf(doc,from_page=from_pa-1,to_page=to_pa-1)
# 如果发现有些页面多余,可以用这个语句删除
# DOC.delete_page(pno=0)
# 保存文件
DOC.save(Doc+"(拆分).pdf")
#print("操作完成,文件以保存在:"+Doc+"(拆分).pdf")
s1="\n操作完成,文件已保存在:\n"+Doc+"(拆分).pdf"
print(s1)
return s1
# 调用主函数
if __name__ == '__main__':
# 一个目录
path = "E:\\Desktop\\Other conferences\\3.A Wide Area Service Oriented Architecture Design for Plug and Play of Power Grid Equipment\\参考文献\\"
# PDF文件名
name = "A Scheduling Strategy of Cloud and Fog Collaborative Computing Based on Execution Time Evaluation.pdf"
doc = path + name
# 开始的页数
from_pa = 1148
# 结束的页数
to_pa = 1152
split(doc,from_pa,to_pa)
用到的函数
(1)fitz.open()
作用:访问受支持的文档,必须使用以下语句打开该文件。
使用方法:
# 打开1.pdf
doc = fitz.open("1.pdf")
# 不加参数,表示暂时是空的
doc1 = fitz.open()
(2)insert_pdf(docsrc,from_page=-1,to_page=-1,start_at=-1)
作用:在不同 PDF 文档之间复制页面,是实现拆分PDF的核心。
用法:
# 打开1.pdf
doc1 = fitz.open('1.pdf')
# 创建一个空的pdf
doc2 = fitz.open()
# 将doc1的1-10页的内容复制到doc2中
doc2.insert_pdf(doc1, to_page = 9)
# 将doc2保存到2.pdf中
doc2.save("2.pdf")
常用参数:
- docsrc (文档) – 打开的PDF文档,不得是当前文档。但是,它可能引用相同的基础文件。
- from_page (int) – docsrc 中的第一个页码。默认值为零。
- to_page (int) – 文档中要复制的最后一页码。默认为最后一页。
- start_at (int) – 第一个复制的页面将成为目标中的页码start_at。默认值 -1 将页面范围追加到末尾。如果为零,则页面范围将插入当前第一页之前。
(3)delete_page(pno=-1)
作用:删除指定的单独一页
用法:
doc1 = fitz.open('1.pdf')
# 删除第一页
doc1.delete_page(0)
参数:pno (int) – 要删除的页面。负数从文档末尾向后计数(如索引)。默认值为最后一页。
小结
PyMuPDF的功能不止上面说的这个,它还有很多强大的功能,后续如果用到再进行补充。
目前上面的代码只支持连续页面的,如果是分批次的,需要运行多次。