【问题标题】:Unknown encoding used in PDF stringsPDF 字符串中使用的未知编码
【发布时间】:2019-04-24 14:14:44
【问题描述】:

我正在编写代码以从 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 文档中找到用于注释的编码?

【问题讨论】:

    标签: pdf character-encoding


    【解决方案1】:

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

    /Encrypt 126988 0 R
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 2015-06-10
      • 2022-11-30
      • 1970-01-01
      • 2018-08-15
      • 2021-03-16
      • 2018-11-23
      • 1970-01-01
      相关资源
      最近更新 更多