使用XFINIUM.PDF确定可视对象在PDF中是否可见

时间:2018-02-19 14:00:03

标签: c# pdf

使用XFINIUM.PDF在pdf中提取视觉对象的边界时,我注意到一些视觉对象实际上并不可见。
但是,我无法找到任何可以用来确定它是否实际可见的属性 与this相反,我不关心看不见的文字,因为它在图像后面。

这是我的意思的一个例子。出于某种原因,这个pdf包含很多在页面上实际看不到的文本。部分内容是实际可见文本的副本,另一部分可能来自下一页。 pdf上的黑色矩形是右上角所选文本的边界框。

Example image taken from XFINIUM.PDF Inspector

所有不可见的文本都是Form XObject的子元素,但我不能忽略XObject,因为顶部的图形也是XObject的子元素,包括轴描述,我不知道想要排除那些。

我注意到可见文本位于PdfGrayColorSpace(包括轴描述)中,不可见文本位于PdfIccColorSpace中,但我认为忽略所有IccColorSpace的东西会与其他一些pdf失败。 我尝试将其转换为RGB但转换为(0,0,0),这显然没有用 知道如何确定视觉对象是否可见?

pdf可用here,示例在第9页。

1 个答案:

答案 0 :(得分:1)

您已经确定隐形文本位于Form XObject中。它不可见的原因是它超出了XObject的范围:

339 0 obj
<<
  /Type /XObject
  /Subtype /Form
  /BBox [ 253.4743 617.9332 447.7891 726.5818 ]
  ...

如果将边界框增加到整页的尺寸

  ...
  /BBox [ 0 0 612 792 ]
  ...

第9页看起来像这样:

Page 9 with enlarged form XObject bounds

(显然XObject包含该页面的旧版本。可能是该图的原始文件丢失了,因为丢失了该页面的副本,使用了早期版本。)

因此:

  

我知道如何确定视觉对象是否可见?

测试Form XObject内容是否在 BBox 中。