我的一位同事填写了动态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\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
我尝试了许多不同的解码工具 - 没有成功。
答案 0 :(得分:0)
您应该使用特定的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