我不清楚字符串在文件中的位置
一般来说,您不会在内容流中看到明文,因为那里使用的编码不需要是标准编码,不需要任何 ASCII 编码。
[ (!") -1 (#) -1 ($) -1 (%&'\() -1 (\)) -1 (*) -1 (*) -1 (\)) -1 (\() -1 ('&%$) -1 (#) -1 (") -1 (!) ] TJ
此操作在其数组操作数中包含您的ZYXWVUTSRQQRSTUVWXYZ
对某些字符对进行一些字距调整。
它看起来像是使用从 33 (= 0x21 = '!') 开始的字节的临时编码。 '!'用于所需的第一个字形,Z, '"' 表示需要第二个Y, '#' 代表第三个X等等。您的测试字符串不仅以这些字符开头,而且以它们结尾,上面的数组也是如此,(!") -1 (#)
... (#) -1 (") -1 (!)
.
检查所使用字体的定义(TT2)。它可能(或可能不)包含帮助您解码此编码的信息。
或者该流中的信息意味着什么。有什么见解吗?
要了解 PDF 内容流的内容,您应该阅读 PDF 规范的相关部分ISO 32000-1 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf,特别是第8章Graphics and 9 Text.
由于您的问题集中在文本内容的识别上,例如阅读第 9.10.2 节将字符代码映射到 Unicode 值:
合格的读者可以按照给定的优先级使用这些方法,将字符代码映射到 Unicode 值。特别是,带标签的 PDF 文档应至少提供以下方法之一(请参阅 14.8.2.4.2,“带标签的 PDF 中的 Unicode 映射”):
如果字体字典包含转UnicodeCMap(参见 9.10.3,“ToUnicode CMaps”),使用该 CMap 将字符代码转换为 Unicode。
-
如果字体是使用预定义编码之一的简单字体MacRoman编码, Mac专家编码, or WinAnsi编码,或者有一个编码,其差异数组仅包含取自 Adobe 标准拉丁字符集的字符名称以及符号字体中的命名字符集(请参阅附录 D):
a) 根据表D.1和字体的对应关系将字符代码映射到字符名称差异 array.
b) 查找角色名称Adobe 字形列表(参见参考书目)获取对应的Unicode值。
-
如果字体是使用表 118 中列出的预定义 CMap 之一的复合字体(Identity–H 和 Identity–V 除外)或其后代 CIDFont 使用 Adobe-GB1、Adobe-CNS1、Adobe-Japan1 或 Adobe-Korea1人物收集:
a) 根据字体的 CMap 将字符代码映射到字符标识符 (CID)。
b) 从字体的 CMap(例如 Adobe 和 Japan1)获取其使用的字符集的注册表和排序来电显示系统信息字典。
c) 通过以以下格式连接注册表和步骤 (b) 中获得的排序来构造第二个 CMap 名称注册-排序–UCS2(例如,Adobe–Japan1–UCS2)。
d) 获取具有步骤 (c) 中构造的名称的 CMap(可从 ASN 网站获得;参见参考书目)。
e)根据步骤(d)中获得的CMap对步骤(a)中获得的CID进行映射,产生Unicode值。
注:其后代 CIDFonts 使用 Adobe-GB1、Adobe-CNS1、Adobe-Japan1 或 Adobe-Korea1 字符集(如 CIDSystemInfo 字典中指定)的 Type 0 字体应具有与符合标准的 PDF 版本相对应的补充编号。读者。有关给定 PDF 版本对应的字符集列表,请参阅表 3。 (可以使用这些字符集的其他补充,但如果补充的编号高于与受支持的 PDF 版本对应的补充,则仅后一补充中的 CID 被视为标准 CID。)
如果这些方法无法生成 Unicode 值,则无法确定字符代码代表什么,在这种情况下,符合要求的读者可以选择自己选择的字符代码。
Edit: 关于评论
其中一个对象提供了一些字体信息。它是“JJOWGO+Cambria”,并将对象 16 引用为“字体文件”,该文件也是不可读的。我会查看手册。在网上找不到任何有关“JJOWGO”的信息。
您不会找到任何具体内容JJOWGO
因为它很可能是一个随机密钥序列,前缀为Cambria
指示并非嵌入该字体的全部,而只是嵌入了其中的一个子集。比照。第9.6.4节字体子集 of ISO 32000-1 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf:
PDF 文档可能包含 Type 1 和 TrueType 字体的子集。描述字体子集的字体和字体描述符与普通字体略有不同。这些差异允许合格的读者识别字体子集并合并包含相同字体的不同子集的文档。 (有关字体描述符的更多信息,请参阅第 9.8 节“字体描述符”。)
对于字体子集,字体的 PostScript 名称 — 字体的值BaseFont条目和字体描述符FontName条目——应以标签开头,后跟加号 (+)。标签应由六个大写字母组成;字母的选择是任意的,但同一PDF文件中的不同子集应具有不同的标签。
示例 EOODIA+Poetica 是 Poetica®(一种 1 类字体)子集的名称。
<<
/FontBBox [ -1475 -2463 2867 3117 ]
/StemV 0
/FontFile2 16 0 R
/Descent -222
/XHeight 467
/Flags 4
/Ascent 950
/FontName /JJOWGO+Cambria
/Type /FontDescriptor
/ItalicAngle 0
/AvgWidth 615
/MaxWidth 2919
/CapHeight 667
>>
该字体描述符不包含明显的编码信息。看看实际情况Font字典并查找转Unicode条目,参见上面第 9.10.2 节的引用。