PDFファイルで塗りつぶされていない楕円を識別する必要があります。その後、色で塗りつぶす必要があり、楕円とページ番号の座標が必要です。誰かがCAM::PDFを使用してこれを解決する方法を教えてもらえますか?
3 に答える
$doc->traverse($dereference, $node, $callbackfunc, $callbackdata)
かなり有望なようです。楕円形のタイプを確認してください。
PDF Specsを見ると、目の前にかなりの課題があると思います。
PDF には、次の 5 種類のグラフィック オブジェクトが用意されています。
パス オブジェクトは、直線、四角形、および 3 次ベジエ曲線で構成される任意の形状です。パスはそれ自体と交差する場合があり、切断されたセクションや穴がある場合があります。パス オブジェクトは、パスをストロークするか、塗りつぶすか、クリッピング境界として使用するか、またはこれらの操作を組み合わせて使用するかを指定する 1 つまたは複数のペイント オペレータで終了します。
テキストオブジェクト...
外部オブジェクト(XObject) は、コンテンツ ストリームの外部で定義され、名前付きリソースとして参照されるオブジェクトです (7.8.3「リソース ディクショナリ」を参照)。XObject の解釈は、その型によって異なります。...
インライン画像オブジェクトは、特別な構文を使用して、小さな画像のデータをコンテンツ ストリーム内で直接表現します。
シェーディング オブジェクトは、色が形状内の位置の任意の関数である幾何学的形状を表します。
したがって、少なくとも、関心のある楕円がパスか、外部オブジェクトか、インライン イメージ オブジェクトか、シェーディング オブジェクトかを知る必要があります。
次に、そのタイプのオブジェクトが楕円形かどうかを判断できる適切なアルゴリズムが必要です。次に、未充填の意味を理解する必要があります。次に、それらを埋める方法を理解する必要があります。
既製のソリューションを提供するために、これほど多くの労力を費やす人がいるとは思えません。
実際には、PDF をグレースケール ビットマップにレンダリングし、単純な形状認識を使用して、塗りつぶされていない楕円から塗りつぶされているかどうかを判断する方が簡単な場合があります。楕円がどこにあるかを確実に判断できる場合 (これはフォームから来ていると想定しているため、楕円の位置は標準になります)、単純なヒューリスティックを作成できます (たとえば、ピクセルの 70% が 50 の場合)。 % グレー以上) を使用して、楕円の種類を特定します。
たとえば、この状況では:
[ ] [ ] [ ] [X]
[ ] [X] [ ] [ ]
[ ] [ ] [X] [ ]
グリッドを使用して楕円を分割できます。
[ ] | [ ] | [ ] | [X]
------+-----------+----------+------
[ ] | [X] | [ ] | [ ]
------+-----------+----------+------
[ ] | [ ] | [X] | [ ]
次に、グリッドをループして、その単純なヒューリスティックを各セルに適用します。