我正在尝试提取任何常规pdf文档的语言,并使用python在CMS中设置它。我试图使用/ Lang属性提取它,这里是代码示例:
pdfFileLang = findInDict('/Lang',pdfFile.resolvedObjects())
def findInDict(needle,indirectObjectDict):
""" Returns the PDF Language """
haystack = indirectObjectDict[0]
LOG('pypdfutils.py getPdfLanguage key haystack',INFO,str(haystack))
for key in haystack.keys():
LOG('pypdfutils.py getPdfLanguage key',INFO,str(key))
try:
value = haystack[key]
LOG('pypdfutils.py getPdfLanguage value',INFO,str(value))
if key == needle:
return value
else:
LOG('pypdfutils.py getPdfLanguage value1',INFO,str(value))
internalDict = value.keys()
LOG('pypdfutils.py getPdfLanguage key Dict',INFO,str(internalDict))
if type(value) == types.DictType:
internalDict = value.keys()
else:
LOG('pypdfutils.py getPdfLanguage value2',INFO,str(value))
for internalkey in internalDict.keys():
internalvalue = internalDict[internalkey]
LOG('pypdfutils.py getPdfLanguage key internalvalue',INFO,str(internalvalue))
if type(internalvalue) == types.DictType and internalvalue.has_key(needle):
return internalvalue[needle]
except Exception,e:
LOG('pypdfutils.py getPdfLanguage',INFO,str(e))
continue
但是当我看到LOGS时,我发现没有这样的属性" / Lang"在字典里。
答案 0 :(得分:2)
看起来你试图搜索' Lang'键入PDF文件中的所有词典。
要查看PDF文件中的语言信息,您需要查看“朗”字样。目录中的条目。 但是,此条目的存在取决于PDF创建软件,该软件用于创建PDF文件,大多数PDF文件没有此条目。
我不理解Python代码,但我相信您使用的PDF库将为您提供对预告片(字典)或目录(根)字典的访问。如果您可以访问预告片,请获取“根”字样。来自dict的价值。这是对Catalog(Root)字典的间接引用。然后解析此dict引用以获取目录字典。从这个目录dict获取/ Lang值将给你属性。
试试,以下
catalog = pdfFile.trailer['/Root'].getObject()
if has_key("/Lang"):
lang = catalog['/Lang'].getObject()
请注意,我不是Python程序员,上面的代码片段是我的第一个Python代码(我不确定它是否正常工作。: - )
上的pypdf参考答案 1 :(得分:1)
如PDF规范中所述: http://www.adobe.com/devnet/pdf/pdf_reference.html
有一个" / Lang"文档目录中的键。在我的PDF规范版本中,这将在7.7.2节中解释。
此语言键定义了完整文档的假定语言,但标记不同的部分除外。
所以,有两点需要注意: 1)这" / Lang"键是可选的。如果不存在,则PDF规范表明该语言未定义。
2)这" / Lang" key可能会被文件中的其他元素覆盖。因此整个文档可能是英文,但第101页上的特定句子可能会将该语言重新定义为法语。
在您的情况下,您的算法应首先尝试查找上面定义的整体文档语言。如果那不存在,那么由你决定该怎么做。您可以在完整的文档中搜索" / Lang"看看你是否找到了其他的钥匙,但是如果你找到了多个钥匙,你就必须决定这意味着什么...