工具和库
适用于Python的PDF工具,模块和库的可用解决方案范围有些混乱,需要花一点时间弄清楚什么是什么,以及哪些项目需要连续维护。根据我们的研究,以下是最新的候选人:
PyPDF2:一个Python库,用于提取文档信息和内容,逐页拆分文档,合并文档,裁剪页面并添加水印。PyPDF2支持未加密和加密的文档。
PDFMiner:完全用Python编写,适用于Python 2.4。对于Python 3,请使用克隆的包PDFMiner.six。这两个软件包都允许您解析,分析和转换PDF文档。这包括对PDF 1.7以及CJK语言(中文,日文和韩文)的支持,以及各种字体类型(Type1,TrueType,Type3和CID)。
pdflibfor Python:Poppler库的扩展,为它提供了Python绑定。它使您可以解析,分析和转换PDF文档。不要将其与具有相同名称的商业吊坠相混淆。
PyFPDF:一个在Python下生成PDF文档的库。从FPDFPHP库移植而来,这是著名的PDFlib扩展替换,其中包含许多示例,脚本和派生类。
PDFTables:一项商业服务,提供从PDF文档附带的表格中提取的内容。提供一个API,以便PDFTables可以用作SAAS。
PyX-Python图形包:PyX是用于创建PostScript,PDF和SVG文件的Python包。它结合了PostScript绘图模型的抽象和TeX / LaTeX接口。这些基元可以构建复杂的任务,例如以可发布的质量创建2D和3D绘图。
ReportLab:一个雄心勃勃的,具有行业实力的图书馆,主要致力于精确创建PDF文档。免费提供开放源代码版本和名为ReportLab PLUS的商业增强版本。
PyMuPDF(又称“ fitz”):MuPDF的Python绑定,这是一种轻量级的PDF和XPS查看器。该库可以访问PDF,XPS,OpenXPS,epub,漫画和小说书格式的文件,并且以其最佳性能和高渲染质量而闻名。
pdfrw:一个基于Python的纯PDF解析器,用于读写PDF。它忠实地再现矢量格式而无需光栅化。与ReportLab结合使用时,它有助于在使用ReportLab创建的新PDF中重用现有PDF的一部分。
使用PyMuPDF提取文本
可从PyPi网站上获取PyMuPDF,并在终端中使用以下命令安装软件包:
$ pip3 installPyMuPDF
使用PyMuPDF提取文本
可从PyPi网站上获取PyMuPDF,并在终端中使用以下命令安装软件包:
1. pip3 installPyMuPDF
显示文档信息,打印页数以及提取PDF文档的文本的方式与PyPDF2相似(请参见清单2)。要导入的模块名为fitz,并返回到PyMuPDF的先前名称。
2使用PyMuPDF从PDF文档中提取内容。
#!/usr/bin/pythonimportfitzpdf_document="example.pdf"doc=fitz.open(pdf_document)print("number of pages: %i"%doc.pageCount)print(doc.metadata)page1=doc.loadPage(0)page1text=page1.getText("text")print(page1text)
PyMuPDF的优点是可以保持原始文档结构完整-带有换行符的整个段落都保留在PDF文档中(参见图2)。
使用PyMuPDF从PDF提取图像
PyMuPDF使用该方法简化了从PDF文档提取图像的过程getPageImageList()。清单3基于PyMuPDF Wiki页面上的示例,并逐页地将PDF中的所有图像提取并保存为PNG文件。如果图像具有CMYK色彩空间,则将首先将其转换为RGB。
清单3:提取图像
#!/usr/bin/pythonimportfitzpdf_document=fitz.open("file.pdf")forcurrent_pageinrange(len(pdf_document)):forimageinpdf_document.getPageImageList(current_page):xref=image[0]pix=fitz.Pixmap(pdf_document,xref)ifpix.n<5:# this is GRAY or RGBpix.writePNG("page%s-%s.png"%(current_page,xref))else:# CMYK: convert to RGB firstpix1=fitz.Pixmap(fitz.csRGB,pix)pix1.writePNG("page%s-%s.png"%(current_page,xref))pix1=Nonepix=None