XML PDF 导致的解析错误(无效标记)

XML parsing error(invalid token) caused by PDF

我的一位同事填写了动态 PDF 表格,保存并发送给我。然而,由于可能使用了一些奇怪的符号,它没有打开,无论是在同事的还是我的电脑上。它给出 XML 解析错误:格式不正确(无效标记)(错误代码 4)。该文档中有很多重要信息,所以我真的需要一种方法来恢复它。

我尝试了很多推荐的东西,例如:

但是我想出了零结果。

唯一成功的是使用默认 Windows 记事本打开 PDF。它显示了 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[=11=]- 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

我尝试了很多不同的解码工具 - 都没有成功。

你应该用过具体的FlateDecoding方法。 Stephen Haywood 编写了一个可行的解决方案。我在 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