如何使用Python获取PDF文件的元数据“页面尺寸”?

5

我尝试在Python 3中使用PyPDF2模块,但无法显示“页面大小”属性。我想知道在扫描到PDF文件之前纸张的尺寸是多少。

类似于这样:

import PyPDF2
pdf=PdfFileReader("sample.pdf","rb")
print(pdf.getNumPages())

但我正在寻找另一个Python函数,而不是例如getNumPages()...

以下命令打印某些元数据,但不包括页面大小:

pdf_info=pdf.getDocumentInfo()
print(pdf_info)
3个回答

7
这段代码应该对您有所帮助:
import PyPDF2
pdf = PyPDF2.PdfFileReader("a.pdf","rb")
p = pdf.getPage(1)

w_in_user_space_units = p.mediaBox.getWidth()
h_in_user_space_units = p.mediaBox.getHeight()

# 1 user space unit is 1/72 inch
# 1/72 inch ~ 0.352 millimeters

w = float(p.mediaBox.getWidth()) * 0.352
h = float(p.mediaBox.getHeight()) * 0.352

1
“~0.352” 正好等于 “25.4/72”。 - Frederik Bode

1
这是一个更加现代化的版本,使用pypdf
from pypdf import PdfReader

pdf = PdfReader("a.pdf")
page = pdf.pages[1]

cm_per_inch = 2.54
points = 72

width_in_user_space_units = page.mediabox.width
height_in_user_space_units = page.mediabox.height

width_in_cm = float(width_in_user_space_units) / points * cm_per_inch
height_in_cm = float(height_in_user_space_units) / points * cm_per_inch


0

获取“在将纸张扫描为PDF文件之前的纸张尺寸”并不是真正可能的,因为扫描仪会设置输出媒体尺寸,而不知道被扫描的媒体。

以信纸放在A4扫描床上或反之为例。纸张边缘的痕迹可能在输出中可见,也可能不可见。扫描仪只是盲目地工作,对于旋转混合的文档,可能需要后处理来重新调整一些页面或将其旋转到正立。

另一个例子是使用手机扫描收据,它可以是任何源大小,但用户软件将确定存储媒体的大小和旋转方式以进行页面文件保存。无论是A5、A4还是A3,无论是纵向还是横向。

因此,你只能从PDF中询问存储的页面大小和显示分辨率,这在页面之间通常有所变化,并且没有确认源旋转。

对于存储页面尺寸的简单列表,有几个命令行实用程序可以列出页面变体。

像xpdf/poppler pdfinfo这样的一行命令工具可以解析所有不同类型的PDF,然后解析输出。输出对于两者都是相似的,有很多行,但对于你的需求来说:

xpdf\pdfinfo -box filename 给出的结果是:页面尺寸:594.96 x 841.92 点(A4)(旋转角度为0度) 而 poppler\pdfinfo -box filename 给出的结果是:页面尺寸:594.96 x 841.92 点(A4)
在扫描过程中,页面尺寸的变化是很常见的。
Page    2 size: 595 x 842 pts (A4) (rotated 0 degrees)
Page    3 size: 595.32 x 841.92 pts (A4) (rotated 0 degrees)
Page    4 size: 595.44 x 842.04 pts (A4) (rotated 0 degrees)
Page    5 size: 595.44 x 842.04 pts (A4) (rotated 0 degrees)
Page    6 size: 595.2 x 841.9 pts (A4) (rotated 0 degrees)
Page    7 size: 595.45 x 841.9 pts (A4) (rotated 0 degrees)
Page    8 size: 595.45 x 841.9 pts (A4) (rotated 0 degrees)
Page    9 size: 595.2 x 841.44 pts (rotated 0 degrees)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接