0
点赞
收藏
分享

微信扫一扫

pdf如何让多张图片在一页

干自闭 2023-11-21 阅读 41

Python 操作PDF文档

1、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文件格式可以将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。该格式文件还可以包含超文本链接、声音和动态影像等电子信息。

1.1. Python处理PDF常用类库

注意: 2023年,都已经回归到 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 的,可以获得页面的所有文字,并且提供的单独的方法用于提取表格。

1.2. PyPDF

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文件

2. 读取PDF

接下来使用PyPDF4对PDF文件进行读取,需要注意的是他对英文的支持比较好,如果读取中文就会出现乱码等问题,在后面我们会介绍几个支持读取中文的库。

2.1. 查看PDF信息

可以在自己的电脑上随便找一个PDF文件进行尝试操作。

information这个变量具有多个实例属性,可以使用这些属性从文档中获取所需的其余元数据。我们可以打印出该信息并将其返回以备将来使用。

2.2. 读取文本

我们先打开PDF文件,再查看他的页数。

xx_post/xx_01.pdf
xx_post/xx_02.pdf
xx_post/xx_03.pdf
xx_post/xx_04.pdf
xx_post/xx_05.pdf
xx_post/xx_06.pdf
xx_post/xx_07.pdf
xx_post/xx_08.pdf
xx_post/xx_09.pdf
xx_post/xx_10.pdf
xx_post/xx_11.pdf
xx_post/xx_12.pdf
xx_post/xx_13.pdf
xx_post/xx_14.pdf
xx_post/xx_15.pdf
xx_post/xx_16.pdf
xx_post/xx_17.pdf
xx_post/xx_18.pdf
4.2.3. 读取图片
PDF有扫描的图片,或者插入图片在内,首先验证文档是否加密。


KeyError Traceback (most recent call last)

Cell In [9], line 1
----> 1 pg[‘/Resources’][‘/XObject’]

File /usr/lib/python3/dist-packages/pypdf/generic/_data_structures.py:269, in DictionaryObject.getitem(self, key)
268 def getitem(self, key: Any) -> PdfObject:
–> 269 return dict.getitem(self, key).get_object()

KeyError: ‘/XObject’


KeyError Traceback (most recent call last)

Cell In [11], line 1
----> 1 im8 = pg[‘/Resources’][‘/XObject’][‘/FXX1’].get_data()
2 with open(‘im.png’, ‘wb’) as f:
3 f.write(im8)

File /usr/lib/python3/dist-packages/pypdf/generic/_data_structures.py:269, in DictionaryObject.getitem(self, key)
268 def getitem(self, key: Any) -> PdfObject:
–> 269 return dict.getitem(self, key).get_object()

KeyError: ‘/XObject’

举报

相关推荐

0 条评论