我正在编写代码以从PDF文件提取URL。在大多数文件中,URL以纯ASCII形式显示。但是,在某些PDF文件中,例如PDF规范本身(https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf),URL以十六进制形式显示,看似没有结构。
例如,在以上文件中的主元数据中,作者显示为:
/Author <F240D629CD72348F>
Atril和其他PDF查看器将其解码为“ Jim King”。十六进制字符串是预期值的两倍,但加扰后无法识别。假设字节值与字符的比例为1:1,则“ i”的编码方式分别为0x40和0x72。
实际URL值:
<EB345AA632781A90E90781A4A0BF42680D1F1AD67910B293798B0AFFED8407CE12684F21B7F471D96DCE4864CAB970A98E7F911C207A12C6E6900D789BC13AE87E76A9D6B8EDDADE7A53EAA521E6421295EA31305C>
应解码为:
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=51502
我还查看了能够解码这些字符串的PyPDF2源代码,但是我没有找到答案。
如何找到PDF文档中用于注释的编码?
答案 0 :(得分:0)
您可以通过查看示例pdf的预告片来对其进行加密,方法是查看其预告片中是否包含 Encrypt 条目:
/Encrypt 126988 0 R
因此,该pdf中的所有字符串和流(很少有例外)都被加密。
(如果您想知道为什么在打开文件时不必输入密码:pdf标准定义了一个默认密码,pdf处理器会在要求用户提供密码之前尝试使用该默认密码。此处使用此默认密码。 )
因此,在分析字符串之前,您必须解密它们。如果您不想自己实现解密,则可以使用qpdf之类的工具来准备代码。