pyPdf从IndirectObject中提取信息

时间:2015-09-30 22:56:24

标签: python pdf pypdf

我正在编写一个脚本,用于读取pdf文件的创建和修改日期。我在Python中使用pyPdf包

我有以下代码

from pyPdf import PdfFileWriter, PdfFileReader

input1 = PdfFileReader(file('myfile','rb'))

input1.input1.getDocumentInfo()

此代码返回

{'/Producer': IndirectObject(185, 0), '/CreationDate': IndirectObject(186, 0), '/ModDate': IndirectObject(186, 0)}

我不确定如何从这些IndirectObject中提取信息,任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

我真的不太了解pyPdf,但是pdfrw有一些类似的功能,而且(恕我直言 - 我是作者)一个更简单的界面。 pdfrw将PDF文件中的结构映射到Python结构中。这是一个示例会话:

>>> from pdfrw import PdfReader
>>> x = pdfrw.PdfReader('some_random.pdf')

什么是x?它是PDF文件的预告片字典,它被映射到(子类)Python字典:

>>> list(x)
['/Size', '/Info', '/Root']

要访问此词典中的项目,您可以使用字典样式查找,但由于所有标准Adobe名称都以斜杠和字母开头,因此为方便起见,pdfrw还支持属性查找。它基本上是字典和列表。信息只是另一本字典:

>>> x.Info
{'/ModDate': '(D:20130802052610)',
 '/Producer': '(ImageMagick 6.6.0-1 2010-03-04 Q8 http://www.imagemagick.org)',
 '/Title': '(US4441207.pdf)',
 '/CreationDate': '(D:20130802052610)'}

所以你可以用同样的方式取出Producer:

>>> x.Info.Producer
'(ImageMagick 6.6.0-1 2010-03-04 Q8 http://www.imagemagick.org)'

Producer的值是一个PDF字符串 - 这就是括号的含义。您可以使用decode()方法剥离它们:

>>> x.Info.Producer.decode()
'ImageMagick 6.6.0-1 2010-03-04 Q8 http://www.imagemagick.org'

与CreationDate相同:

>>> x.Info.CreationDate.decode()
'D:20130802052610'

pdfrw文档并不是很好,但是在github上有很多例子,有些例子在SO上。