在Python中提取PDF页面大小
我想读取一个PDF文件,并获取它的每一页以及每一页的大小。我并不需要对它进行任何操作,只是想读取内容。
目前我在尝试使用pyPdf,这个库能满足我大部分需求,除了无法获取页面大小。我知道可能需要逐页查看,因为PDF文档中的页面大小可能会有所不同。有没有其他的库或者方法可以使用呢?
我试过使用PIL,有些网上的教程甚至提到用d=Image(imagefilename)的方式,但它从来没有读取到我的PDF文件——它能读取我给它的其他所有文件,甚至一些我都不知道PIL能处理的东西。
如果有人能提供一些建议,我会很感激——我现在是在Windows 7 64位上,使用的是Python 2.5(因为我还做一些GAE的工作),不过我也乐意在Linux或者更新的Python版本上进行尝试。
9 个回答
使用 pdfrw 这个库:
>>> from pdfrw import PdfReader
>>> pdf = PdfReader('example.pdf')
>>> pdf.pages[0].MediaBox
['0', '0', '595.2756', '841.8898']
长度是用点来表示的(1点 = 1/72英寸)。格式是 [x0, y0, x1, y1]
(感谢,mara004!)。
更新于2023年8月30日:提供示例pdf,添加裁剪框信息。
更新于2021年7月22日:原来的回答并不总是正确,所以我更新了我的回答。
使用PyMuPDF时:
>>> import fitz
>>> doc = fitz.open("example.pdf")
>>> page = doc[0]
>>> print(page.rect.width, page.rect.height)
284.0 473.0
>>> print(page.mediabox.width, page.mediabox.height)
595.304 841.89
>>> print(page.cropbox.width, page.cropbox.height)
473.0 284.0
在PyMuPDF中,mediabox、cropbox和rect的返回值都是一种叫做Rect的类型,它有“宽度”和“高度”这两个属性。对于大多数人来说,rect可能是最有用的。
这三者在大多数情况下是相同的,但有时它们会有很大不同:cropbox和rect是页面的可见区域(也就是你在普通pdf查看器中看到的内容),而mediabox则是物理介质的大小。
cropbox和rect之间的一个区别是,cropbox在文档中与/CropBox相同,并且在页面旋转时不会改变。而rect会受到旋转的影响。想了解更多关于PyMuPDF中不同框的信息,可以查看术语表。还可以参考PDF文档 14.11.2.1。
示例pdf可以在这里下载。