如何使用CAM :: PDF识别PDF文档中的未填充椭圆?

时间:2009-10-19 13:25:15

标签: perl pdf detection shapes

我需要在PDF文件中识别未填充的椭圆。在那之后,我应该用颜色填充它们,我需要带有页码的椭圆坐标。任何人都可以帮助我使用CAM::PDF来解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

$doc->traverse($dereference, $node, $callbackfunc, $callbackdata)似乎非常有希望。检查并查看椭圆的类型。

答案 1 :(得分:1)

PDF Specs,我会说你面前有很多挑战:

  

PDF提供了五种类型的图形对象:

     
      
  • 路径对象是由直线,矩形和立方贝塞尔曲线组成的任意形状。路径可以自身相交,并且可以具有断开的部分和孔。路径对象以一个或多个绘制操作符结束,这些操作符指定路径是否应该被描边,填充,用作裁剪边界,还是这些操作的某种组合。

  •   
  • 文本对象 ...

  •   
  • 外部对象(XObject)是在内容流之外定义的对象,并作为命名资源引用(请参阅7.8.3,“资源字典”)。 XObject的解释取决于它的类型。 ...

  •   
  • 内嵌图像对象使用特殊语法直接在内容流中表示小图像的数据。

  •   
  • 着色对象描述几何形状,其颜色是形状内位置的任意函数。

  •   

因此,至少需要知道您感兴趣的椭圆是路径或外部对象还是内嵌图像对象或着色对象。

然后,您需要一个合适的算法来判断该类型的对象是否为椭圆形。然后,您需要弄清楚未填充的含义。然后,你需要弄清楚如何填充它们。

我似乎不太愿意为你提供现成的解决方案。

答案 2 :(得分:0)

将PDF渲染为灰度位图并使用简单的形状识别来确定填充的未填充椭圆实际上可能更简单。如果你可以可靠地确定椭圆的位置(我假设它来自一个形状,所以椭圆的位置是标准的),你可以做一个简单的启发式(例如,如果70%的像素是50 %灰色或更高)确定它是什么样的椭圆形。

例如在这种情况下:

[ ]        [ ]         [ ]       [X]

[ ]        [X]         [ ]       [ ]

[ ]        [ ]         [X]       [ ]

您可以使用网格分割椭圆:

[ ]   |    [ ]    |    [ ]   |   [X]
------+-----------+----------+------
[ ]   |    [X]    |    [ ]   |   [ ]
------+-----------+----------+------
[ ]   |    [ ]    |    [X]   |   [ ]

然后从那里开始遍历网格,将简单的启发式应用于每个单元格。