java - 再次有来自 PdfTextStripper 的不可见文本

标签 java pdf pdfbox

文件示例:file

问题 - 使用 PdfTextStripper 提取文本时,页面开头的“ASSETS”后面有标记“9/1/2017”和“387986”(应删除),以及其他一些隐藏标记。

我已经申请了this解决方案(所以我不会在这里复制粘贴它,因为实际上问题完全相同)并且隐藏的文本仍然出现在页面上。除了剪辑路径之外,它会被其他东西隐藏吗? 谢谢!

最佳答案

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。 (此外,该文本非常小,但如果用黑色等绘制,仍然可见。)

solution您提到的文档是针对该问题中提供的示例文档之类的文档实现的,其中通过定义剪辑路径(在文本的边界之外)和填充路径(隐藏下面的文本)使不可见文本变得不可见. 因此,您的白色文本不会被识别为隐藏文本。

不幸的是,识别白色文本上白色的不可见性比剪切或覆盖文本更难确定,因为人们不仅需要知道当前图形状态的属性(如剪切路径)或删除文本中的所有文本给定路径,还需要在绘制文本之前知道页面部分的颜色(以检查“白色”细节)。

另一方面,如果您假设页面背景本质上是白色,则忽略所有白色文本相当简单:只需在 processTextPosition 中检测当前填充颜色即可:

PDColor fillColor = gs.getNonStrokingColor();

并将其与您想要视为不可见的白色口味进行比较。 (通常它足以与 RGB、CMYK 和灰度白色进行比较;在极少数情况下,您还必须正确解释更复杂的颜色空间。此外,您还可能认为几乎白色不可见,(.99、.99、. 99) RGB 与 WHITE 几乎无法区分。)

如果您发现当前颜色为白色,请忽略当前的 TextPosition

但请注意,就像您引用的解决方案一样,这还不是识别所有白色文本的最终解决方案:为此,您还必须检查文本渲染模式:如果它只是填充(默认),上面的内容成立,但如果它(也)抚摸,你(也)必须考虑抚摸颜色;如果它呈现为不可见,则无需考虑颜色;如果文本渲染模式包括添加到剪切路径,那么只要剪切路径保持不变,您就必须等待并确定稍后将在页面的这部分中绘制什么,这绝对不是小事!

关于java - 再次有来自 PdfTextStripper 的不可见文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48828500/

相关文章:

java - 如何使用 HTMLUNIT Java 刷新 HtmlPage?

java - 找不到与 www.billiving.com 匹配的主题备用 DNS 名称。为什么会这样,如何解决?

android - 在现有 PDF 文件中添加文本/注释并在 android 中查看/渲染输出

java - 使用 PDFBox 保护 PDF

java - 如何使用 Apache PDFBox 在现有文档上设置打印设置属性

java - JPA:如何确保托管实体的属性值以事务方式写入数据库?

java - 在哪里可以测试我的 httpPost 方法?

pdf - 是否可以在 Cassandra 中以 CQL blob 类型存储 PDF 文件?

linux - 有什么工具可以在 Linux 上将 PDF 转换为 XL?

java - 用 PDFBox 填充横向 PDF