1

PDF Clown の TextInfoExtractionSample を使用して PDF テーブルを Excel に抽出していますが、結合されたセルを除いてそれを行うことができました。以下のコードでは、オブジェクトの「コンテンツ」に対して、スキャンされたコンテンツがテキスト、XObject、ContainerObject として表示されますが、境界線には何も表示されません。PDFテーブルの境界線を表すオブジェクト、またはテキストがテーブルのヘッダーであるかどうかを検出する方法を知っている人はいますか?

   private void Extract(ContentScanner level, PrimitiveComposer composer)
   {
      if(level == null)
        return;
      while(level.MoveNext())
      {
        ContentObject content = level.Current;
      }
    }
4

1 に答える 1

3

私は PDF Clown's を使用していTextInfoExtractionSampleます...

以下のコードでは、オブジェクトの「コンテンツ」に対して、スキャンされたコンテンツがテキスト、XObject、ContainerObject として表示されますが、境界線には何も表示されません。

while(level.MoveNext())
{
    ContentObject content = level.Current;
}

A) すべてのコンテンツにアクセスする

ループ コードでは、元の例から非常に重要なブロックを削除しました。

    if(content is XObject)
    {
        // Scan the external level!
        Extract(((XObject)content).GetScanner(level), composer);
    }

    if(content is ContainerObject)
    {
        // Scan the inner level!
        Extract(level.ChildLevel, composer);
    }

これらのブロックは、サンプルを複雑なオブジェクト (あなたが言及したXObject、ContainerObject ) に再帰させ、それらには独自の単純なコンテンツが含まれます。

B) すべてのコンテンツを検査する

PDFテーブルの境界線を表すオブジェクトは誰でも知っています

残念ながら、PDF コンテンツにはボーダー属性のようなものはありません。代わりに、境界線は独立したオブジェクトであり、通常は線または非常に細い四角形のベクトル グラフィックです。

したがって、ページのコンテンツを ( APathに示されているように再帰的に) スキャンしている間、次を含むインスタンス (名前空間org.pdfclown.documents.contents.objects) を探す必要があります。

  • moveTo mlineTo l、およびstroke S操作または
  • 四角形の 操作と塗りつぶしの 操作

この回答が役立つ場合があります)

そのような行に出くわしたら、それらを解釈する必要があります。これらの線は境界線である可能性がありますが、下線、ページの装飾などとして使用することもできます...

PDF がたまたまタグ付けされている場合、解釈する必要が少ない限り、物事は少し簡単になる可能性があります。代わりに、セルの開始位置と終了位置を示すタグ情報を読み取ることができるため、グラフィカルな線を解釈する必要はありません。残念ながら、タグ付けされている PDF は、タグ付けされていないものよりもまだ少なくなります。

または、テキストがテーブルのヘッダーであるかどうかを検出する方法は?

上記と同様に、タグ付けされた PDF をたまたま検査しない限り、テキストがテーブル ヘッダーであるとすぐにわかるものは何もありません。もう一度解釈する必要があります。そのテキストは、テーブルを形成するために決定した行の外側にありますか? 上の内側ですか?それとも中のどこか?特定のフォントで描かれていますか?それとももっと大きい?異なる色?等。

于 2015-08-07T15:29:00.833 に答える