Как извлечь язык из документа PDF

Я пытаюсь извлечь язык из любого общего документа PDF и установить его в CMS с помощью Python. Я пытаюсь извлечь его с помощью атрибута /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

Но когда я вижу ЛОГИ, я не нахожу такого атрибута "/Lang" в словаре.

2 ответа

Похоже, вы пытались найти ключ "Lang" во всех словарях вашего PDF-файла.

Чтобы проверить информацию о языке из файла PDF, вам необходимо проверить запись "Lang" в каталоге. Однако наличие этой записи зависит от программного обеспечения для создания PDF, которое используется для создания PDF-файла, и большинство PDF-файлов не имеют этой записи.

Я не понимаю код Python, но я верю, что используемая вами библиотека PDF предоставит вам доступ к трейлеру (словарь) или каталогу (корневой) словарь. Если у вас есть доступ к диктовке трейлера, получите значение Root из диктанта. Это косвенная ссылка на каталог (корневой) словарь. Затем разрешите эту ссылку, чтобы продиктовать словарь каталога. Принимая значение /Lang из этого каталога dict даст вам атрибут.

Попробуй, следующее

catalog = pdfFile.trailer['/Root'].getObject()
if has_key("/Lang"):
    lang = catalog['/Lang'].getObject()

Обратите внимание, что я не программист на Python и приведенный выше фрагмент кода - мой первый код на Python (я не уверен, что он работает.:-)

См. Ссылку на pypdf по адресу http://sourcecodebrowser.com/python-pypdf/1.10/classpy_pdf_1_1pdf_1_1_pdf_file_reader.html.

Как поясняется в спецификации PDF: http://www.adobe.com/devnet/pdf/pdf_reference.html

В каталоге документов есть ключ "/Lang". В моей версии спецификации PDF это объясняется в разделе 7.7.2.

Этот языковой ключ определяет язык, предполагаемый для всего документа, за исключением тех частей, которые помечены по-разному.

Итак, два предостережения: 1) Этот ключ "/Lang" является необязательным. Если это не так, в спецификации PDF говорится, что язык не определен.

2) Этот ключ "/Lang" может быть перезаписан другими элементами в файле. Таким образом, весь документ может быть английским, но конкретные предложения на странице 101 могут переопределять язык, например, как французский.

В вашем случае ваш алгоритм должен сначала попытаться найти общий язык документа, как определено выше. Если этого нет, вам решать, что делать. Вы можете найти в полном документе ключи "/Lang", чтобы узнать, найдете ли вы какие-либо другие, но если вы найдете несколько, вам придется решить, что это значит...

Другие вопросы по тегам