Ekstrak Data dari Tabel di PDF

Ekstrak Tabel dari PDF secara programatis

Karena PDF adalah format yang paling umum untuk bertukar dokumen, mari kita pertimbangkan sebuah dokumen dengan beberapa kumpulan data yang memerlukan analisis. Dalam artikel ini, kami akan menjelaskan ekstraksi tabel dari PDF.

Aspose.PDF untuk C++ menyediakan alat yang dibutuhkan pengembang untuk mengekstrak data dari tabel dalam dokumen PDF.

Contoh ini menunjukkan penggunaan Kelas TableAbsorber untuk mengambil data tabel dari tabel dalam file PDF.

Contoh berikut menunjukkan ekstraksi tabel dari semua halaman:

void ExtractTable() {
    std::clog << __func__ << ": Start" << std::endl;
    // String untuk nama path
    String _dataDir("C:\\Samples\\Parsing\\");

    // String untuk nama file
    String infilename("sample-table.pdf");


    auto document = MakeObject<Document>(_dataDir + infilename);
    auto absorber = MakeObject<TableAbsorber>();

    // Pindai halaman
    for (auto page : document->get_Pages()) {
        absorber->Visit(page);
        for (auto table : absorber->get_TableList()) {
        std::cout << "Table" << std::endl;
        // Iterasi melalui daftar baris
        for (auto row : table->get_RowList()) {
            // Iterasi melalui daftar sel
            for (auto cell : row->get_CellList()) {
                String sb;
                for (auto fragment : cell->get_TextFragments()) {
                sb += fragment->get_Text();
                }
                std::cout << sb << "|";
            }
            std::cout << std::endl;
        }
        }
    }
    std::clog << __func__ << ": Finish" << std::endl;
}

Ekstrak tabel di area tertentu pada halaman PDF

Setiap tabel yang diserap memiliki properti Rectangle yang menggambarkan posisi tabel pada halaman.

Jadi, jika Anda perlu mengekstrak tabel yang terletak di wilayah tertentu, Anda harus bekerja dengan koordinat spesifik.

Contoh berikut menunjukkan cara mengekstrak tabel yang ditandai dengan Square Annotation:

void ExtractMarkedTable()
{
    std::clog << __func__ << ": Start" << std::endl;
    // String untuk nama path
    String _dataDir("C:\\Samples\\Parsing\\");

    // String untuk nama file
    String infilename("sample-table.pdf");


    auto document = MakeObject<Document>(_dataDir + infilename);
    auto absorber = MakeObject<TableAbsorber>();

    auto page = document->get_Pages()->idx_get(1);
    auto sqa = MakeObject<Aspose::Pdf::Annotations::SquareAnnotation>(page, Rectangle::get_Trivial());
    auto annotationSelector = MakeObject<Aspose::Pdf::Annotations::AnnotationSelector>(sqa);


    auto list = annotationSelector->get_Selected();
    if (list->get_Count() == 0) {
        std::cerr << "Tabel yang ditandai tidak ditemukan.." << std::endl;
        return;
    }

    auto squareAnnotation = System::DynamicCast<Aspose::Pdf::Annotations::SquareAnnotation>(list->idx_get(1));

    absorber->Visit(page);

    for (auto table : absorber->get_TableList())
    {
        auto isInRegion =
        (squareAnnotation->get_Rect()->get_LLX() < table->get_Rectangle()->get_LLX()) &&
        (squareAnnotation->get_Rect()->get_LLY() < table->get_Rectangle()->get_LLY()) &&
        (squareAnnotation->get_Rect()->get_URX() > table->get_Rectangle()->get_URX()) &&
        (squareAnnotation->get_Rect()->get_URY() > table->get_Rectangle()->get_URY());

        if (isInRegion)
        {
        for (auto row : table->get_RowList()) {
            // Iterasi melalui daftar sel
            for (auto cell : row->get_CellList()) {
                String sb;
                for (auto fragment : cell->get_TextFragments()) {
                sb += fragment->get_Text();
                }
                std::cout << sb << "|";
            }
            std::cout << std::endl;
        }
        }
    }
    std::clog << __func__ << ": Finish" << std::endl;
}

Ekstrak Data Tabel dari PDF dan simpan dalam file CSV

Contoh berikut menunjukkan cara mengekstrak tabel dan menyimpannya sebagai file CSV. Untuk melihat cara mengonversi PDF ke Spreadsheet Excel, silakan merujuk ke artikel Convert PDF to Excel.

void ExtractTableSaveCSV()
{
    std::clog << __func__ << ": Start" << std::endl;
    // String untuk nama jalur
    String _dataDir("C:\\Samples\\Parsing\\");

    // String untuk nama file
    String infilename("sample-table.pdf");
    String outfilename("PDFToXLS_out.csv");

    // Buka dokumen
    auto document = MakeObject<Document>(_dataDir + infilename);

    // Instansiasi objek ExcelSave Option
    auto excelSave = MakeObject<ExcelSaveOptions>();
    excelSave->set_Format(ExcelSaveOptions::ExcelFormat::CSV);

    // Simpan output dalam format XLS
    document->Save(_dataDir + outfilename, excelSave);
    std::clog << __func__ << ": Finish" << std::endl;
}