我需要识别 PDF 文件中未填充的椭圆。之后,我应该用颜色填充它们,并且我需要带有页码的椭圆坐标。任何人都可以帮助我如何使用CAM::PDF解决这个问题吗?
3 回答
这$doc->traverse($dereference, $node, $callbackfunc, $callbackdata)
似乎很有希望。检查并查看椭圆的类型。
查看PDF Specs,我会说您面临着相当大的挑战:
PDF 提供了五种类型的图形对象:
路径对象是由直线、矩形和三次贝塞尔曲线组成的任意形状。路径可能与自身相交,并且可能具有断开的部分和孔。路径对象以一个或多个绘制操作符结束,这些操作符指定路径是否应被描边、填充、用作剪切边界或这些操作的某种组合。
一个文本对象...
外部对象(XObject) 是在内容流之外定义并作为命名资源引用的对象(参见 7.8.3,“资源字典”)。XObject 的解释取决于它的类型。...
内联图像对象使用特殊语法直接在内容流中表达小图像的数据。
着色对象描述几何形状,其颜色是形状内位置的任意函数。
因此,至少需要知道您感兴趣的椭圆是路径还是外部对象或内联图像对象或阴影对象。
然后,您需要一个适当的算法来确定该类型的对象是否为椭圆形。然后,您需要弄清楚未填充的含义。然后,您需要弄清楚如何填充它们。
在我看来,似乎不太可能有人会付出那么多努力来为您提供现成的解决方案。
实际上,将 PDF 渲染为灰度位图并使用简单的形状识别来确定填充的椭圆和未填充的椭圆实际上可能更简单。如果您可以可靠地确定椭圆的位置(我假设这是来自表格,所以椭圆的位置将是标准的),您可以进行简单的启发式(例如,如果 70% 的像素是 50 % 灰色或更高)以确定它是哪种椭圆形。
例如在这种情况下:
[ ] [ ] [ ] [X]
[ ] [X] [ ] [ ]
[ ] [ ] [X] [ ]
您可以使用网格分割椭圆:
[ ] | [ ] | [ ] | [X]
------+-----------+----------+------
[ ] | [X] | [ ] | [ ]
------+-----------+----------+------
[ ] | [ ] | [X] | [ ]
然后从那里你只需遍历网格,将简单的启发式应用于每个单元格。