如何提取pdf文档的语言

时间:2014-05-09 06:43:26

标签: python pdf pypdf

我正在尝试提取任何常规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"在字典里。

2 个答案:

答案 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代码(我不确定它是否正常工作。: - )

请参阅http://sourcecodebrowser.com/python-pypdf/1.10/classpy_pdf_1_1pdf_1_1_pdf_file_reader.html#a92be75503c895367083a846b3060e632

上的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"看看你是否找到了其他的钥匙,但是如果你找到了多个钥匙,你就必须决定这意味着什么...