首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么itext5生成通过Acrobat不可见的文本?

为什么itext5生成通过Acrobat不可见的文本?
EN

Stack Overflow用户
提问于 2018-05-14 12:28:56
回答 1查看 327关注 0票数 0

我有一个小PDF文档,这是一个裁剪版本从一个更大的PDF文档。我惊讶地看到,itext5 (使用自定义位置策略)仍然在复制裁剪后遗漏的所有文本。所有这些文本都不能通过Acrobat阅读器看到。

我如何让它5检测和忽略这样的隐藏文本?链接到带有隐藏文本的PDF

编辑1错误文档被超链接

编辑2 -附代码段

代码语言:javascript
复制
public class MyLocationTextExtractionStrategy : 
LocationTextExtractionStrategy
{
  public void RenderText(TextRenderInfo renderInfo)
  {
   string text = renderInfo.GetText();
  }
}

谢谢你,索拉布

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-15 11:27:04

从…的结合

我惊讶地看到,itext5 (使用自定义位置策略)仍然在复制裁剪后遗漏的所有文本。

以及你的代码片段

公共类MyLocationTextExtractionStrategy : LocationTextExtractionStrategy { public void RenderText(TextRenderInfo renderInfo) { string text = renderInfo.GetText();}

我假设您实际上感到惊讶的是,在您的RenderText方法的MyLocationTextExtractionStrategy中,您检索了超出裁剪框的文本TextRenderInfo对象。

但这是很自然的!您的RenderText方法实现了IRenderListener接口的方法,并且对页面内容中的每个匹配的绘图指令调用该接口的方法,不管它们的结果最终是否是可见的。

我怎样才能让它5检测和忽略这样的隐藏文本?

通过根据当前文档页的裁剪框的坐标检查文本坐标,可以很容易地检测和忽略裁剪框外的文本。

iText实际上包含一个过滤器架构,它允许排除文本块以达到不满足某些标准的策略。

如果你现在就像这样使用你的策略:

代码语言:javascript
复制
MyLocationTextExtractionStrategy strategy = new MyLocationTextExtractionStrategy();
PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy);

您可以像这样应用麦田框区域筛选器:

代码语言:javascript
复制
MyLocationTextExtractionStrategy strategy = new MyLocationTextExtractionStrategy();
FilteredTextRenderListener strategyWithFilter = new FilteredTextRenderListener(strategy,
        new RegionTextRenderFilter(pdfReader.GetCropBox(1)));
PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategyWithFilter);

作为旁白:

我要文档中所有可见的文本。当我说“可见”时,我指的是通过可见的文本。我不想将文本限制在任何具体领域。所有可见的文字。

  • 文本可以不可见,除了超出麦田框的边界之外,还有许多其他原因。
代码语言:javascript
复制
- it may be drawn in the same color as the background, e.g. white on white,
- some setting or operation may transform text color and background color to  the same color even though they may differ originally,
- a text rendering mode may be used that doesn't draw anything to start with,
- the glyphs of the font used for the text may be invisible,
- the text may be covered by some image,
- ...

文本提取将提取所有那些“看不见的”文本片段。

(在一定程度上,您可以扩展文本提取框架以识别这一点,在堆栈溢出的情况下,您可以在这里找到关于此类扩展的许多问题和答案,但总会有一些情况您没有涵盖。)

  • 此外,案文可能只涉及部分内容。例如,考虑字母'R‘和一些覆盖'R’右腿的白色矩形的情况,使它看起来像'P‘ 文本提取将返回'R‘,即使Adobe显示一些您认为是'P’的东西。
  • 字体可能包含不完整或完全错误的信息,其中之一的Unicode字符对应于该信息。 文本提取将返回使用这种字体的文本的错误输出,或者可能根本没有输出。
  • PDF中的文本可能不是使用文本绘图说明绘制的,而是使用矢量图形(如任意表单)绘制的。 文本提取根本不会提取这样的“文本”。
  • ..。

如果这些问题是您的节目停止,文本提取是错误的技术,您应该使用OCR代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50330362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档