再次有来自 PdfTextStripper 的不可见文本
Again having invisible text coming from PdfTextStripper
文件示例:file。
问题 - 使用 PdfTextStripper 提取文本时,在页面开头的 "ASSETS" 之后有令牌“9/1/2017”和“387986”应该被删除,还有一些其他隐藏的令牌。
我已经应用了 解决方案(所以我不在这里复制粘贴它,因为实际上问题是完全一样的),但隐藏文本仍然出现在页面上。它可以被剪辑路径以外的其他东西隐藏吗?
谢谢!
Could it be hidden by something else except clip path?
是的。如果是您的新文档,文本会以白底白字书写,例如ASSETS
之后的387986
是这样画的:
1 1 1 rg
/TT0 16 Tf
-1011.938 115.993 Td
(@A,BAC)Tj
初始1 1 1 rg
设置填充颜色为RGB WHITE。 (此外,该文本非常小,但如果以黑色绘制,则仍然可见。)
您提到的 是针对该期中出现的示例文档等文档实现的,其中 通过定义剪辑路径(在剪辑路径的边界之外)使不可见文本不可见text is) 和填充路径(隐藏下面的文本)。 因此,您的白色文本不会被它识别为隐藏。
不幸的是,识别白色文本上白色的不可见性比剪切或覆盖文本更难确定,因为人们不仅需要知道当前图形状态的 属性(如剪切路径)或者删除给定路径内的所有文本,还需要在绘制文本之前知道页面部分的颜色(检查 on WHITE 细节)。
另一方面,如果您假设页面背景基本上是白色的,则忽略所有白色文本相当简单:只需检测 processTextPosition
中的当前填充颜色即可:
PDColor fillColor = gs.getNonStrokingColor();
并将其与您认为不可见的白色风味进行比较。 (通常与 RGB、CMYK 和灰度 WHITE 进行比较就足够了;在极少数情况下,您还必须正确解释更复杂的色彩空间。此外,您可能还会考虑近乎白色的颜色不可见,(.99, .99, . 99) RGB 和白色很难区分。)
如果您发现当前颜色为白色,请忽略当前颜色 TextPosition
。
但是请注意,就像您引用的解决方案一样,这还不是识别所有白色文本的最终解决方案:为此,您还必须检查文本呈现模式:如果它只是 filling(默认值),以上内容成立,但如果它是(也)stroking,你将(也)必须考虑描边颜色;如果呈现不可见,则没有颜色可考虑;如果文本渲染模式包括adding to path for clipping,你将不得不等待并确定只要剪辑路径成立,稍后将在页面的这一部分绘制什么,绝对不简单!
文件示例:file。
问题 - 使用 PdfTextStripper 提取文本时,在页面开头的 "ASSETS" 之后有令牌“9/1/2017”和“387986”应该被删除,还有一些其他隐藏的令牌。
我已经应用了
Could it be hidden by something else except clip path?
是的。如果是您的新文档,文本会以白底白字书写,例如ASSETS
之后的387986
是这样画的:
1 1 1 rg
/TT0 16 Tf
-1011.938 115.993 Td
(@A,BAC)Tj
初始1 1 1 rg
设置填充颜色为RGB WHITE。 (此外,该文本非常小,但如果以黑色绘制,则仍然可见。)
您提到的
不幸的是,识别白色文本上白色的不可见性比剪切或覆盖文本更难确定,因为人们不仅需要知道当前图形状态的 属性(如剪切路径)或者删除给定路径内的所有文本,还需要在绘制文本之前知道页面部分的颜色(检查 on WHITE 细节)。
另一方面,如果您假设页面背景基本上是白色的,则忽略所有白色文本相当简单:只需检测 processTextPosition
中的当前填充颜色即可:
PDColor fillColor = gs.getNonStrokingColor();
并将其与您认为不可见的白色风味进行比较。 (通常与 RGB、CMYK 和灰度 WHITE 进行比较就足够了;在极少数情况下,您还必须正确解释更复杂的色彩空间。此外,您可能还会考虑近乎白色的颜色不可见,(.99, .99, . 99) RGB 和白色很难区分。)
如果您发现当前颜色为白色,请忽略当前颜色 TextPosition
。
但是请注意,就像您引用的解决方案一样,这还不是识别所有白色文本的最终解决方案:为此,您还必须检查文本呈现模式:如果它只是 filling(默认值),以上内容成立,但如果它是(也)stroking,你将(也)必须考虑描边颜色;如果呈现不可见,则没有颜色可考虑;如果文本渲染模式包括adding to path for clipping,你将不得不等待并确定只要剪辑路径成立,稍后将在页面的这一部分绘制什么,绝对不简单!