情景:我有一个使用版本1.6的PDF。在PDF中,有几个流。在这些流中有压缩文本(Flate),所以我对这些流进行了解压缩。在此之后,我提取了相应的解压缩流的Tj部分。我假设在Tj命令之前的括号中会有可读的文本,但结果如下:

的实际问题:,我不知道我有什么,我想知道它是什么类型的内容。此外:是否可以从这些字符串中提取纯文本,或者我是否需要进一步的信息来提取纯文本?
进一步研究:PDF,我尝试分析iTextSharp生成的地方(似乎是用于生成PDF的C#库)。不知道这是否相关的信息,但可能是图书馆使用一种特殊的方式加密它的文本数据或其他什么.
发布于 2017-02-14 14:57:13
我假设在Tj命令之前的括号之间会有可读的文本。
这个假设只适用于简单的PDF。
引用PDF规范(ISO 32000-1):
文本显示操作符的字符串操作数应解释为标识要绘制的符号的字符代码序列。 对于简单的字体,字符串的每个字节都应被视为单独的字符代码。然后在字体的编码中查找字符代码,以选择字形,如9.6.6所述,“字符编码”。 使用组合字体(PDF 1.2),可以使用多字节代码来选择象形文字.在这种情况下,字符串的一个或多个连续字节将被视为单个字符代码。代码长度和从代码到象形文字的映射是在称为CMap的数据结构中定义的,在9.7中描述了“复合字体”。
(第9.4.3节-文本-显示操作符- ISO 32000-1)
因此,
我想知道它是什么类型的内容。
如上所述,这些“字符串”由单字节或多字节字符代码组成。这些代码取决于当前字体的编码。PDF中的每个字体对象可以有不同的编码。
这些编码可能是一些标准编码(MacRomanEncoding,MacExpertEncoding,或WinAnsiEncoding),也可能是一些自定义编码。特别是在嵌入字体子集的情况下,您通常会发现编码,其中1是绘制在页面上的第一个字形的代码,2是第二个的代码,不同的字形,3个是第三个,不同的等等。
此外:是否可以从这些字符串中提取纯文本,或者我是否需要进一步的信息来提取纯文本?
由于显示指令的文本字符串参数的编码取决于当前字体,因此至少需要跟踪当前字体名称(Tf指令),并从当前字体对象查找编码信息( encoding 或ToUnicode map)。
第9.10节--文本内容的提取-- ISO 32000-1更详细地解释了这一点。
此外,显示指令的文本顺序不一定是阅读的顺序。例如,"Hello“一词可以先画'o',然后左画'el',然后再左画'H',然后右画,最后再画剩下的'l‘。两个单词不需要用空格字形分隔,可能只是有一个文本定位指令向右一点。
因此,通常您还必须跟踪所绘制的单独字符串的位置。
https://stackoverflow.com/questions/42227899
复制相似问题