在Python中从PDF中提取页面大小

在Python中从PDF中提取页面大小,python,pdf,Python,Pdf,我想读一份PDF,并得到一些它的页面列表和每个页面的大小。我不需要以任何方式操纵它,只要阅读它 目前正在试用pyPdf,它做了我需要的一切,除了一种获取页面大小的方法。了解到我可能需要反复阅读,因为pdf文档中的页面大小可能会有所不同。是否有其他图书馆/方法可供我使用 我试着使用PIL,一些在线菜谱甚至有d=Image(imagefilename)的用法,但它从来没有读过我的PDF——它读过我扔给它的所有东西——甚至一些我不知道PIL可以做的事情 感谢您的指导-我使用的是windows 7 64

我想读一份PDF,并得到一些它的页面列表和每个页面的大小。我不需要以任何方式操纵它,只要阅读它

目前正在试用pyPdf,它做了我需要的一切,除了一种获取页面大小的方法。了解到我可能需要反复阅读,因为pdf文档中的页面大小可能会有所不同。是否有其他图书馆/方法可供我使用

我试着使用PIL,一些在线菜谱甚至有d=Image(imagefilename)的用法,但它从来没有读过我的PDF——它读过我扔给它的所有东西——甚至一些我不知道PIL可以做的事情

感谢您的指导-我使用的是windows 7 64、python25(因为我也使用GAE),但我很乐意在Linux或更现代的Pythis上使用它。

这可以通过以下方式完成:


(以前称为并仍然参考其文档。)

另一种方法是使用popplerqt4

doc = popplerqt4.Poppler.Document.load('/path/to/my.pdf')
qsizedoc = doc.page(0).pageSize()
h = qsizedoc.height() # given in pt,  1pt = 1/72 in
w = qsizedoc.width() 
对于pdfminer python 3.x(pdfminer.six)(未在python 2.7上尝试):

parser=PDFParser(打开(pdfPath,'rb'))
doc=PDFDocument(解析器)
PageSizeList=[]
对于PDFPage中的页面。创建页面(文档):
打印(page.mediabox)#时使用:

长度以点为单位(1磅=1/72英寸)。格式为
['0','0',宽度,高度]
(谢谢!)。

带有:


input1=PdfileReader(文件('example.pdf','rb')对我来说是这样的。对我来说不起作用;我得到TypeError:'str'对象不能作为错误调用。[0,0,width,height]@Astrophe是正确的,但有一个更可读的(但没有文档记录)解决方案。如果您查看一下,您会发现
RectangleObject
类有两个方便的方法,包括
getWidth()
(和
getHeight()
),这比
mediaBox[2]好得多
使用的是什么单位?对我也适用。你知道
mediabox
cropbox
之间的区别吗?简而言之,mediabox是整个页面的大小,包括白边。cropbox是页面的大小+应用程序用于执行任何功能的任何区域。签出“长度以点为单位”除非页面包含一个UserUnit条目,该条目可用于更改此处的单位。无可否认,此选项仅很少使用。我尝试过此选项,但有时无法提取信息,而PyMuPDF(cges30901的答案)一直表现良好。原因是pdfrw无法提取“/MediaBox”某个时候从pdf文件中输入(wierd)。除了
doc.loadPage(0)
之外,您还可以简单地编写
doc[0]
:-)
page
这里还有一个返回大小的属性
MediaBoxSize
。这是读取PDF文件最快的包装库
CropBox
属性
page
对象将未旋转的大小作为
Rect
对象返回。
Rect
具有
width
height
属性。这是一种快速获取相关位的方法。
doc = popplerqt4.Poppler.Document.load('/path/to/my.pdf')
qsizedoc = doc.page(0).pageSize()
h = qsizedoc.height() # given in pt,  1pt = 1/72 in
w = qsizedoc.width() 
parser = PDFParser(open(pdfPath, 'rb'))
doc = PDFDocument(parser)
pageSizesList = []
for page in PDFPage.create_pages(doc):
    print(page.mediabox) # <- the media box that is the page size as list of 4 integers x0 y0 x1 y1
    pageSizesList.append(page.mediabox) # <- appending sizes to this list. eventually the pageSizesList will contain list of list corresponding to sizes of each page
>>> from pdfrw import PdfReader
>>> pdf = PdfReader('example.pdf')
>>> pdf.pages[0].MediaBox
['0', '0', '595.2756', '841.8898']
>>> import fitz
>>> doc = fitz.open("example.pdf")
>>> page = doc.loadPage(0)
>>> print(page.MediaBox)
Rect(0.0, 0.0, 595.0, 842.0) #format is (0.0, 0.0, width, height) if page is not rotated