2014-10-30 51 views
0

我正在使用iText解析来自PDF文件的文本。我发现一些文本被返回但不可见。 例如,我iText可以识别PDF中的不可见文本吗?

  • 金融衍生”,这确实页面
  • 金融衍生”,这是可见的存在,但仍然的iText返回。另外,它们不能由Adobe acrobat或Foxit选择。

iText有一种方法来区分可见/不可见文本吗?或者PDF格式是否有与此有关的任何规范?

+2

特定文本是如何被制成“隐形”的?它有什么东西在它之上?非常小?没有颜色,或者与它的背景相同?离开页面?渲染在一个不包含大纲的字体?用一种将所有内容映射到一个空格字符的字体呈现? – usr2564301 2014-10-30 18:43:50

回答

2

您给没有代码很难提出实际的代码......然而,为了使文字无形的习惯方法是使用文本渲染模式。 PDF中的所有文本都有这样的文本渲染模式,它决定文本是否呈现为填充文本(普通),描边文本,填充和描边......并且其中一种可能性是“不可见”,它确保文本不是“显示。

解析页面上的文本iText和其他东西允许您筛选返回的文本 - 请参阅FilteredRenderListener。在过滤期间,您可以确定您是否对文本感兴趣。有很多关于您可以使用TextRenderInfo对象检查的文本的信息。该对象有一个名为“getTextRenderMode”的方法,它将返回上述文本渲染模式。如果该调用返回“3”,那么您知道该文本是隐形渲染的。

现在,如果您想确切知道这些文本是否确实呈现(并且不使用@jongware在其评论中提出的其他讨厌技巧之一,那么您必须检查PDF或与其分享一个示例我们可以看一看

+0

有趣 - 这个特殊的渲染模式转换为[this“no stroke,no fill”](http://stackoverflow.com/a/ 5184903/2564301),还是它实际上是PDF规范的一部分?(在这种情况下,我很乐意将它添加到我的包中!) – usr2564301 2014-10-30 21:45:38

+1

(*其中一种可能性是“不可见”,确保文本未显示*) - *此特定渲染模式是否将此转换为“无笔画,无填充”或实际上是PDF规范的一部分* ISO 32000-1的表106将渲染模式3描述为**既不是填充也不是描边文本(不可见)**,所以**没有描边,没有填充**和**不可见**应该确实重合。 – mkl 2014-10-30 23:17:33