2015-09-30 112 views
-1

我正在写一个脚本,它将读取pdf文件的创建和修改日期。我使用pyPdf包在PythonpyPdf从IndirectObject提取信息

我有以下代码

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

我真的不知道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)'} 

所以,你可以拉出生产者以同样的方式:

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

生产者的值是一个字符串,PDF - 这就是括号是什么。

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

同样的:你可以用decode()方法剥夺他们

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

的pdfrw文档是不是真的很大,但也有很多在GitHub上的例子,在这里几在SO上。