它会被除了剪辑路径之外的其他东西隐藏吗?
是的。如果是您的新文档,则文本以白底白字书写,例如在ASSETS 之后的387986 是这样绘制的:
1 1 1 rg
/TT0 16 Tf
-1011.938 115.993 Td
(@A,BAC)Tj
初始的1 1 1 rg 将填充颜色设置为RGB WHITE。 (此外,该文本非常小,但如果以例如黑色绘制,仍然可见。)
您提到的solution 是针对该问题中提供的示例文档之类的文档实现的,其中 通过定义剪辑路径(在文本所在的范围之外)和填充使不可见文本变得不可见路径(隐藏下面的文本)。因此,您的白色文本不会被它识别为隐藏。
不幸的是,在 WHITE 文本上识别 WHITE 的不可见性比被剪切或覆盖的文本更难确定,因为人们不仅需要知道当前图形状态的 a 属性(如剪切路径)或删除 a 内的所有文本给定路径,还需要在绘制文本之前知道页面部分的颜色(以检查 on WHITE 详细信息)。
另一方面,如果您假设页面背景本质上是白色,则忽略所有白色文本相当简单:只需在processTextPosition 中检测当前填充颜色:
PDColor fillColor = gs.getNonStrokingColor();
并将其与您想视为不可见的 WHITE 风味进行比较。 (通常与 RGB、CMYK 和灰度白色进行比较就足够了;在极少数情况下,您还必须正确解释更复杂的色彩空间。此外,您可能还认为几乎白色是不可见的,(.99、.99、. 99) RGB 几乎无法与 WHITE 区分开来。)
如果您发现当前颜色为白色,请忽略当前的TextPosition。
但请注意,就像您引用的解决方案一样,这还不是识别所有白色文本的最终解决方案:为此,您还必须检查文本呈现模式:如果它只是 填充 em> (默认值),上述情况成立,但如果它是(也)stroking,你将(也)必须考虑描边颜色;如果呈现不可见,则无需考虑颜色;并且如果文本渲染模式包括添加到路径以进行剪切,则您必须等待并确定稍后将在页面的这一部分中绘制的内容,只要剪切路径保持不变,这绝对不是微不足道的!