我认为会有括号之间可读文本在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是第二个不同字形的代码,第三个是不同的字形,等等。
此外:是否有可能从这些字符串中获取纯文本,还是需要更多信息来提取纯文本?
由于用文字说明的字符串参数的编码依赖于当前的字体,你至少需要跟踪当前的字体名称(TF指令)和查找编码信息(编码或ToUnicode map)从当前字体对象。
第9.10节 - 文本内容提取 - ISO 32000-1对此进行了更详细的解释。
此外,显示指令的文本顺序不一定是阅读顺序。单词“你好”可以例如首先画出'o',然后向左,然后'el',然后再离开,然后'H',然后向右,最后剩下'l'。而且两个单词不需要用空格字形分隔,只需要一个文本定位指令即可。
因此,一般来说,您还必须跟踪绘制的单独字符串的位置。
来源
2017-02-14 14:57:13
mkl