PDFからC#でテーブルデータを抽出する

PDFからプログラムでテーブルを抽出する

PDFからテーブルを抽出することは、テーブルがさまざまな方法で作成されるため、簡単な作業ではありません。

Aspose.PDF for .NETには、テーブルを簡単に取得するためのツールがあります。テーブルデータを抽出するには、次の手順を実行する必要があります。

  1. ドキュメントを開く - Documentオブジェクトをインスタンス化します。
  2. TableAbsorberオブジェクトを作成します。
  3. 分析するページを決定し、Visitを希望のページに適用します。表形式のデータがスキャンされ、結果がTableListに保存されます。
  4. TableListAbsorbedTableのリストです。データを取得するには、TableListを反復処理し、RowListCellListを処理します。
  5. AbsorbedCellにはTextFragmentsコレクションが含まれています。これを自分の目的に合わせて処理できます。

以下のコードスニペットは、Aspose.PDF.Drawingライブラリでも動作します。

以下の例は、すべてのページからのテーブル抽出を示しています。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTable()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tables();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {                    
        foreach (var page in document.Pages)
        {
            Aspose.Pdf.TableAbsorber absorber = new Aspose.Pdf.TableAbsorber();
            absorber.Visit(page);
            foreach (var table in absorber.TableList)
            {
                Console.WriteLine("Table");
                foreach (var row in table.RowList)
                {
                    foreach (var cell in row.CellList)
                    {                                 
                        foreach (var fragment in cell.TextFragments)
                        {
                            var sb = new StringBuilder();
                            foreach (var seg in fragment.Segments)
                            {
                                sb.Append(seg.Text);
                            }
                            Console.Write($"{sb.ToString()}|");
                        }                           
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

PDFページの特定の領域でテーブルを抽出する

各吸収されたテーブルには、ページ上のテーブルの位置を説明するRectangleプロパティがあります。

特定の領域にあるテーブルを抽出する必要がある場合は、特定の座標で作業する必要があります。

以下のコードスニペットは、Aspose.PDF.Drawingライブラリでも動作します。

以下の例は、四角形注釈でマークされたテーブルを抽出する方法を示しています。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractMarkedTable()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tables();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    { 
        var page = document.Pages[1];
        var squareAnnotation =
            page.Annotations.FirstOrDefault(ann => ann.AnnotationType == Annotations.AnnotationType.Square)
            as Aspose.Pdf.Annotations.SquareAnnotation;


        var absorber = new Aspose.Pdf.Text.TableAbsorber();
        absorber.Visit(page);

        foreach (var table in absorber.TableList)
        {
            var isInRegion = (squareAnnotation.Rect.LLX < table.Rectangle.LLX) &&
            (squareAnnotation.Rect.LLY < table.Rectangle.LLY) &&
            (squareAnnotation.Rect.URX > table.Rectangle.URX) &&
            (squareAnnotation.Rect.URY > table.Rectangle.URY);

            if (isInRegion)
            {
                foreach (var row in table.RowList)
                {
                    foreach (var cell in row.CellList)
                    {
                        foreach (var fragment in cell.TextFragments)
                        {
                            var sb = new StringBuilder();
                            foreach (var seg in fragment.Segments)
                            {
                                sb.Append(seg.Text);
                            }
                            var text = sb.ToString();
                            Console.Write($"{text}|");
                        }
                    }
                    Console.WriteLine();
                }
            }
        }
    }
}

PDFからテーブルデータを抽出し、CSVファイルに保存する

以下の例は、テーブルを抽出し、CSVファイルとして保存する方法を示しています。 PDFをExcelスプレッドシートに変換する方法については、PDFをExcelに変換するの記事を参照してください。

以下のコードスニペットは、Aspose.PDF.Drawingライブラリでも動作します。

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractTableSaveExcel()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_Tables();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "input.pdf"))
    {
        // Instantiate ExcelSave Option object
        Aspose.Pdf.ExcelSaveOptions excelSave = new Aspose.Pdf.ExcelSaveOptions { Format = ExcelSaveOptions.ExcelFormat.CSV };

        // Save the output in XLS format
        document.Save(dataDir + "ExtractTableSaveXLS_out.xlsx", excelSave);
    }
}