Parsing PDF文本对象:如果没有*Tf*操作符,应该使用什么字体和解码?

Parsing PDF文本对象:如果没有*Tf*操作符,应该使用什么字体和解码?,parsing,pdf,fonts,adobe,decoding,Parsing,Pdf,Fonts,Adobe,Decoding,当没有前面的Tf运算符时,应该使用什么字体和编码来解码和显示BT/ET块内的字符串 用空字符串替换这样的字符串可以吗 例如: BT 8.04 0 0 8.04 63 67.92 Tm [(oL)-1 (Om)]TJ ... ... ET 如果可能,请参考Adobe规范或建议。首先,当前文本字体是文本状态参数,因此是图形状态的一部分 因此,要确定文本对象中某些文本的当前文本字体,仅在该文本对象内查找Tf操作是不够的。文本字体可能在内容流中设置得更早,可以在以前的文本对象中设置,也可以在页面描述级

当没有前面的Tf运算符时,应该使用什么字体和编码来解码和显示BT/ET块内的字符串

用空字符串替换这样的字符串可以吗

例如:

BT
8.04 0 0 8.04 63 67.92 Tm
[(oL)-1 (Om)]TJ
...
...
ET

如果可能,请参考Adobe规范或建议。

首先,当前文本字体是文本状态参数,因此是图形状态的一部分

因此,要确定文本对象中某些文本的当前文本字体,仅在该文本对象内查找Tf操作是不够的。文本字体可能在内容流中设置得更早,可以在以前的文本对象中设置,也可以在页面描述级别设置。此外,它可能受到先前的“保存图形状态”和“恢复图形状态”操作的影响

但是,如果在文本绘制操作之前根本没有Tf操作,该怎么办?那么

(ISO 32000-1,表105-文本状态运算符)

因此,文本字体没有初始值。因此,如果没有Tf操作,也没有已知的编码

早些时候:

要绘制字形,内容流应首先识别要使用的字体。Tf操作员应指定字体资源的名称

(ISO 32000-1,第9.2.2节-显示文本的基础)

因此,没有前面的Tf的文本绘制操作实际上是无效的


因此,一个严格的文本提取器甚至可以停止从有问题的流中提取文本,因为它显然已被破坏

@MaksymPolshcha一句警告的话,我的回答只是从规范中得出的。另一方面,PDF查看器可能具有初始字体值;因此,没有预选字体的文本文档可能会在此类查看器中正确显示,并且从中复制和粘贴可能会返回匹配结果。PDF查看器在修复PDF错误方面有着悠久的历史。因此,尽管上述情况属实,您最终可能会遇到问题,声称“我的PDF查看器确实提取了该文本,为什么您的代码没有?”