Python处理PDF——PyMuPDF的安装与使用!
1、PyMuPDF简介
1. 介绍
2. 功能
解密文件 - 访问元信息、链接和书签 - 以栅格格式(PNG和其他格式)或矢量格式SVG呈现页面 - 搜索文本 - 提取文本和图像 - 转换为其他格式:PDF, (X)HTML, XML, JSON, text 对于PDF文档,存在大量的附加功能:它们可以创建、合并或拆分。页面可以通过多种方式插入、删除、重新排列或修改(包括注释和表单字段)。- 可以提取或插入图像和字体 - 完全支持嵌入式文件 - pdf文件可以重新格式化,以支持双面打印,色调分离,应用标志或水印 - 完全支持密码保护:解密、加密、加密方法选择、权限级别和用户/所有者密码设置 - 支持图像、文本和绘图的 PDF 可选内容概念 - 可以访问和修改低级 PDF 结构 命令行模块"python -m fitz…"具有以下特性的多功能实用程序 - 加密/解密/优化- 创建子文档- 文档连接- 图像/字体提取- 完全支持嵌入式文件- 保存布局的文本提取(所有文档) **新:布局保存文本提取!** 脚本`fitzcliy .py`通过子命令`“gettext”`提供不同格式的文本提取。特别有趣的当然是布局保存,它生成的文本尽可能接近原始物理布局,周围有图像的区域,或者在表格和多列文本中复制文本。
👉点击领取:最全Python资料合集
2、安装
Pillow:当使用Pixmap.pil_save()和 Pixmap.pil_tobytes()时需要- fontTools:当使用Document.subset_fonts()时需要- pymupdf-fonts 是一个不错的字体选择,可以用于文本输出方法使用pip安装命令:pip install PyMuPDF
import fitz
关于命名fitz的说明
3、使用方法
1. 导入库,查看版本
import fitzprint(fitz.__doc__)PyMuPDF 1.18.16: Python bindings for the MuPDF 1.18.0 library.Version date: 2021-08-05 00:00:01.Built for Python 3.8 on linux (64-bit).
2. 打开文档
doc = fitz.open(filename)
3. Document的方法和属性
>>> doc.count_page1>>> doc.metadata{<!-- -->'format': 'PDF 1.7','title': '','author': '','subject': '','keywords': '','creator': '','producer': '福昕阅读器PDF打印机 版本 10.0.130.3456','creationDate': "D:20210810173328+08'00'",'modDate': "D:20210810173328+08'00'",'trapped': '','encryption': None}
4. 获取元数据
5. 获取目标大纲
toc = doc.get_toc()
6. 页面(Page)
page = doc.load_page(pno) # loads page number 'pno' of the document (0-based)page = doc[pno] # the short form
for page in doc:# do something with 'page'# ... or read backwardsfor page in reversed(doc):# do something with 'page'# ... or even use 'slicing'for page in doc.pages(start, stop, step):# do something with 'page'
接下来,主要介绍Page的常用操作!
a. 检查页面的链接、批注或表单字段
# get all links on a pagelinks = page.get_links()
for link in page.links():# do something with 'link'
for annot in page.annots():# do something with 'annot'for field in page.widgets():# do something with 'field'
b. 呈现页面
pix = page.get_pixmap()
c. 将页面图像保存到文件中
pix.save("page-%i.png" % page.number)
d. 提取文本和图像
text = page.get_text(opt)
"text":(默认)带换行符的纯文本。无格式、无文字位置详细信息、无图像- "blocks":生成文本块(段落)的列表- "words":生成单词列表(不包含空格的字符串)- "html":创建页面的完整视觉版本,包括任何图像。这可以通过internet浏览器显示- "dict"/"json":与HTML相同的信息级别,但作为Python字典或resp.JSON字符串。- "rawdict"/"rawjson":"dict"/"json"的超级集合。它还提供诸如XML之类的字符详细信息。- "xhtml":文本信息级别与文本版本相同,但包含图像。- "xml":不包含图像,但包含每个文本字符的完整位置和字体信息。使用XML模块进行解释。
e. 搜索文本
areas = page.search_for("mupdf")
7. PDF操作
a. 修改、创建、重新排列和删除页面
PDF:Document.delete_page()和Document.delete_pages()删除页面 - Document.copy_page()、Document.fullcopy_page()和Document.move_page()将页面复制或移动到同一文档中的其他位置。 Document.select()将PDF压缩到选定页面,参数是要保留的页码序列。这些整数都必须在0<=i<page_ count范围内。执行时,此列表中缺少的所有页面都将被删除。剩余的页面将按顺序出现,次数相同(!)正如您所指定的那样。因此,您可以轻松地使用创建新的PDF: - 第一页或最后10页- 仅奇数页或偶数页(用于双面打印)- 包含或不包含给定文本的页- 颠倒页面顺序。保存的新文档将包含仍然有效的链接、注释和书签(i.a.w.指向所选页面或某些外部资源)。
b. 连接和拆分PDF文档
# append complete doc2 to the end of doc1doc1.insert_pdf(doc2)
doc2 = fitz.open() # new empty PDFdoc2.insert_pdf(doc1, to_page = 9) # first 10 pagesdoc2.insert_pdf(doc1, from_page = len(doc1) - 10) # last 10 pagesdoc2.save("first-and-last-10.pdf")
c. 保存
d. 关闭
热门推荐