PDF(便携式文件格式,Portable Document Format)是由Adobe Systems在1993年用于文件交换所发展出的文件格式。 PDF主要由三项技术组成:衍生自PostScript;字型嵌入系统;资料压缩及传输系统。它的优点在于跨平台、能保留文件原有格式(Layout)、开放标准,能免版税(Royalty-free)自由开发PDF相容软体,是一个开放标准,2007年12月成为ISO 32000国际标准。
PDF 格式的优点
- 跨平台性:PDF文件格式与操作系统平台无关,文件不管是在 Windows,Unix还是在苹果公司的 Mac OS 操作系统中都是通用的。
- 易于阅读:不同平台、不同阅读软件打开不会出错或变形,以及转换成PDF后可以避免其他软件产生的不兼容和字体替换问题,使得文档的灵活性提高。
- 不易编辑:PDF是板式文档,可防止他人无意中触到键盘修改文件内容。
- 体积小巧:PDF文件使用了工业标准的压缩算法,通常比 PostScript 文件小,易于传输与储存。
- 信息丰富:PDF文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息。
常用类库
注意: 2023年,pyPdf、PyPDF2和PyPDF4都已经回归到 pypdf 了。 在 Debian 12中,通过下面命令安装:
sudo apt install -y python3-pypdf
大多数组织以PDF形式发布其数据。随着AI的发展,需要更多数据来进行预测和分类。 PDF处理有些困难,但是可以利用下面的API来简化它。 本文将简要介绍如何使用Python处理PDF。Python处理PDF的第三库也有很多,主要有:
PDFMiner
Python中用于PDF处理的库。容易安装,也容易使用。PDFMiner
为非程序员提供命令实用程序,为程序员提供API接口。PyPDF
这个Python PDF库是可扩展的。可以从pdf中提取文本,裁剪, 然后将PDF文档与加密和解密功能合并。PyPDF有很多版本。在PyPDF4之前,PyPDF2更加流行。目前都已经合并到 pypdf .pdfrw
与上面两个提及非常相似。除了这种相似性之外,pdfrw还具有自己的USP(唯一卖点)。pdfrw
:一个替代的PDF操作包。Patrick Maupin创建了一个名为pdfrw
的软件包,
它可以完成许多与PyPDF2相同的工作。除了加密的特殊情况外,本文后面提到PyPDF2的所有操作,
pdfrw
均可以实现。pdfrw
的最大区别在于它与ReportLab软件包集成,
因此可以使用一些或所有预先存在的PDF构建一个新的PDF。
Slate
它是PDFMiner的包装实现。reportlab
Reportlab的特长在于创建PDF文件,尤其是程序动态生成PDF文件的功能十分强大, 但是遗憾的是开源版本没有提供读取PDF文件的相关功能。pyMuPDF
MuPDF可以访问PDF,XPS,OpenXPS,CBZ,EPUB和FB2(电子书)格式的文件, 并且以其最佳性能和高渲染质量而著称。tabula-py
tabula 是专门用来提取PDF表格数据的,同时支持PDF导出为CSV、Excel格式, 但是这工具是用 java 写的,依赖 java7/8。tabula-py 就是对它做了一层 python 的封装pdfplumber
pdfplumber 是按页来处理 pdf 的,可以获得页面的所有文字, 并且提供的单独的方法用于提取表格。
pyPdf,PyPDF2和PyPDF4的历史
最初的pyPdf软件包于2005年发布。pyPdf的最后一个正式版本是在2010年。 大约一年后,一家名为Phasit的公司赞助了一个名为PyPDF2的pyPdf分支。 该代码编写为向后与原始代码兼容,并且用了好多年,效果一直很好,其最后一个版本是在2016年。
有一个名为PyPDF3的软件包简短系列版本,该项目被重命名为PyPDF4。 所有这些项目都完全相同,但pyPdf和PyPDF2 +之间的最大区别在于后者版本增加了Python 3支持。 Python 3的原始pyPdf有一个不同的Python 3分支,但是这个分支已经多年没有维护了。
最新版本的PyPDF4支持PyPDF2的大多数功能,但也有部分功能不兼容。
pypdf4的主要功能
PyPDF4是一个纯Python PDF库,能够拆分, 合并,裁剪和转换PDF文件的页面。它还可以将自定义数据, 查看选项和密码添加到PDF文件。它可以从PDF检索文本和元数据, 以及将整个文件合并在一起。
- 提取文档信息(标题,作者等)
- 逐页拆分文档
- 逐页合并文档
- 裁剪页面
- 将多个页面合并为一个页面
- 加密和解密PDF文件
还有更多的功能需要探索。