使用 itextsharp 识别肉眼看不见但可使用 Acrobat 搜索的文本

Use itextsharp to identify text which is invisible to the eyes but searchable using Acrobat

我在使用 itextsharp 从 PDF 文件中提取内容时遇到了一个奇怪的情况。该文档有一小块人眼看不见的文本,但在使用 itextsharp 和通过 Acrobat 搜索时意外显示 Reader.

行为 - 在 Acrobat 中使用查找 Reader

当我搜索单词 "type text" 时,Acrobat Reader 将检测是否存在文本块。

行为 - 复制粘贴到记事本

人眼看不到这段文字。在执行批量 CTRL+A,然后是 CTRL+复制,然后是 CTRL+V 到记事本时,也会出现这个隐藏文本的小块。完整的短语是 [输入文字].

pdf 样本

https://drive.google.com/open?id=1Ytic9WWLseX8DgeJGyMGCgVgXuMOdytP

我正在使用自定义位置策略来阅读内容。 TextRenderInfo.GetStrokeColorTextRenderInfo.StrokeColor 方法在整个文档中都为我提供了非 NULL 值。

矢量图

我知道矢量图有可能会遮挡一部分文本,从而使人眼看不到它,但仍然完全合法。我不能确定示例文档中发生了什么。

如果示例文档不是矢量图形遮挡的情况,那么itextsharp/itext的API是否提供检测此类"invisible"词的可能性?

谢谢,

由于许多不同的构造,文本可能不可见:

  • 有一种既不删除又不填充的文本绘制模式,
  • 可以使用与背景相同的颜色绘制文本,
  • 使用的字体可能只有空字形,
  • 有些东西可能会覆盖文本,
  • 透明度可能为 100%,
  • 剪辑路径可能会排除文本,
  • ...

因此,对于一般解决方案,您需要检查很多不同的情况...


对于您的示例文档,我们处于 "something may cover the text" 情况;更准确地说是您的想法

I understand that there is a possibility of vector graphics occluding a portioni of text , thereby making it invisible to the human eyes while still being completely legitimate. I can't say for sure what is happening in the sample document.

是正确的,在显示该区域的标题之前,在此勾勒出的区域上绘制了一个白色矩形:

这涵盖了在内容流的最开头绘制的“[Type text]”(否则可见)。

(实际上这个矩形被标记为一个不太合适的段落。)

If the sample document is not a case of vector graphic occlusion, then does the API of itextsharp/itext offer any possibility to detect such "invisible" words?

矢量图遮挡的情况。尽管如此,还是可以使用 iText 识别像这样的关键星座:

如果您使用 LocationTextExtractionStrategy,您可以将其扩展为也收到有关路径绘制指令的通知(实施 [I]ExtRenderListener)。您可以在此处检查路径是否已填充(或用较大的线宽描边)。在这种情况下,您可以检查该策略已经收集的文本块是否存在重叠。如果有,您可以警告可疑构造。

您还不能 100% 确定这会使文本不可见,因为取决于当前的混合模式、透明度值、原始文本和路径填充颜色、遮罩以及原始文本的一些更模糊的细节可能会或可能不会发光(它甚至可能比以前更多可见)。