Ошибка синтаксического анализа XML (неверный токен), вызванная PDF

Мой коллега заполнил динамическую PDF-форму, сохранил и отправил ее мне. Однако из-за, возможно, какого-то странного символа, который он использовал, он не открывался ни на моем коллеге, ни на моем компьютере. Он выдавал ошибку синтаксического анализа XML: неправильно сформирован (неверный токен) (код ошибки 4). В этом документе было много важной информации, поэтому мне действительно нужен способ ее восстановить.

Я перепробовал много рекомендованных вещей, таких как:

  • Обновление официального Adobe Acrobat Reader до последней версии. После этого ремонтирую.
  • Открытие с помощью другого программного обеспечения, такого как FOXIT Reader, программного обеспечения для работы с документами (Libre Office, блокнот, Sublime и т. Д.).
  • Открытие с Adobe Acrobay Livecycle Design - программное обеспечение, с помощью которого была создана эта форма заявки (я полагаю).
  • Использование различных библиотек PDF2text (написано на Python). Поскольку форма была динамичной, этот метод был неэффективным
  • Сделал запись на официальном сайте поддержки Adobe (да, это единственный способ получить помощь от Adobe, используя бесплатные версии программного обеспечения)
Однако я пришел с нулевым результатом.

картинка ошибки

Единственное, что удалось немного - открыть PDF с помощью стандартного блокнота Windows. Он показывал код в формате XML, однако большая часть кода была закодирована (на самом деле небольшая часть закодированного кода видна в конце, но есть гораздо больше) Было что-то вроде этого:

%PDF-1.6
%âãÏÓ
1 0 obj
<</AcroForm 59 0 R/MarkInfo<</Marked true>>/Metadata 2 0 R/Names 60 0 R/Pages 235 0 R/Type/Catalog/Perms 233 0 R/StructTreeRoot 243 0 R/NeedsRendering true>>
endobj
2 0 obj
<</Length 4114/Subtype/XML/Type/Metadata>>stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.4-c005 78.150055, 2013/08/07-22:58:47        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:pdf="http://ns.adobe.com/pdf/1.3/"
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:desc="http://ns.adobe.com/xfa/promoted-desc/">
         <dc:format>application/pdf</dc:format>
         <dc:creator>
            <rdf:Seq>
               <rdf:li>DAAD</rdf:li>
            </rdf:Seq>
         </dc:creator>
         <dc:title>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">PBF: Gutachtenformular</rdf:li>
            </rdf:Alt>
         </dc:title>
         <pdf:Producer>Adobe XML Form Module Library</pdf:Producer>
         <xmp:CreateDate>2008-08-14T09:56:29+02:00</xmp:CreateDate>
         <xmp:CreatorTool>Adobe LiveCycle Designer ES 10.4</xmp:CreatorTool>
         <xmp:MetadataDate>2017-03-17T09:14:06+01:00</xmp:MetadataDate>
         <xmp:ModifyDate>2017-03-17T09:14:06+01:00</xmp:ModifyDate>
         <xmpMM:DocumentID>uuid:d62a53c0-8974-4b14-888e-569579f416d8</xmpMM:DocumentID>
         <xmpMM:InstanceID>uuid:c097e78e-1dd1-11b2-0a00-9e91daf58acd</xmpMM:InstanceID>
         <desc:embeddedHref rdf:parseType="Resource">
            <rdf:value>G:\Z2\00- Verbindliche Formulare, Vorlagen\___Logo_fuer_Formulare_06_2015\DAAD_Globe_Logo-Supplement_eng_tl_rgb_300dpi.jpg</rdf:value>
            <desc:ref>/template/subform[1]/pageSet[1]/pageArea[1]/draw[2]</desc:ref>
         </desc:embeddedHref>
         <desc:Schema-Anmerkung rdf:parseType="Resource">
            <rdf:value>16 byte UUID in 32 chars (hexadecimal encoded)</rdf:value>
            <desc:ref>/template/subform[1]/subform[1]/field[1]</desc:ref>
         </desc:Schema-Anmerkung>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>



<?xpacket end="w"?>
endstream
endobj
214 0 obj
<</Filter[/FlateDecode]/Length 419>>stream
H‰¼“[kÂ0Çßýg}²LŠ¦àæC7'†nÞØžB°§.,¶¥IÕáüîKÓ8[´2˜¬”^’ÿ¹äwÎa>Tåg„¡_]û”°@HÊ9z6t:`%‡>гàërº%Æ‚…Á1UnnáÊiØ•M

Я пробовал много разных инструментов декодирования - безуспешно.

1 ответ

Решение

Вы должны были использовать определенный метод FlateDecoding. Есть рабочее решение, написанное Стивеном Хейвудом. Я проверил его правильность в Python 2. Просто измените заголовок PDF на свой и запустите в терминале с командой python. Вот суть.

#!/bin/bash
import re
import zlib

pdf = open("some_doc.pdf", "rb").read()
stream = re.compile(r'.*?FlateDecode.*?stream(.*?)endstream', re.S)

for s in stream.findall(pdf):
    s = s.strip('\r\n')
    try:
        print(zlib.decompress(s))
        print("")
    except:
        pass
Другие вопросы по тегам