首页 > 解决方案 > PDF 字符串中使用的未知编码

问题描述

我正在编写代码以从 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。

实际网址值: <EB345AA632781A90E90781A4A0BF42680D1F1AD67910B293798B0AFFED8407CE12684F21B7F471D96DCE4864CAB970A98E7F911C207A12C6E6900D789BC13AE87E76A9D6B8EDDADE7A53EAA521E6421295EA31305C>

应解码为: http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=51502

我还查看了设法解码这些字符串的 PyPDF2 源代码,但我还没有找到答案。

如何在 PDF 文档中找到用于注释的编码?

标签: pdfcharacter-encoding

解决方案


示例 pdf 已加密,您可以通过查看包含Encrypt条目的预告片来确定:

/Encrypt 126988 0 R

因此,该 pdf 中的所有字符串和流(除了极少数例外)都是加密的。

(如果您想知道为什么在打开文件时不必输入密码:pdf 标准定义了一个默认密码,pdf 处理器在要求用户提供密码之前会尝试该密码。此处使用此默认密码。)

因此,在分析字符串之前,您必须解密它们。如果您不想自己实现解密,可以使用 qpdf 之类的工具来为您的代码做准备。


推荐阅读