File PDF adalah format standar untuk bertukar dokumen melalui internet. Dokumen seperti faktur dan panduan produk biasanya dibagikan dalam bentuk PDF. Mungkin ada situasi di mana Anda memiliki beberapa faktur yang berisi data tabular yang perlu Anda ekstrak dan proses lebih lanjut. Akan lebih efisien untuk mengekstrak data ini secara terprogram. Untuk itu, artikel ini akan mengajarkan Anda cara mengekstrak data dari tabel PDF menggunakan C++.
- C++ API untuk Mengekstraksi Data dari Tabel di File PDF
- Ekstrak Data dari Tabel PDF menggunakan C++
- Ekstrak Data dari Tabel di Area Tertentu Halaman PDF
C++ API untuk Mengekstraksi Data dari Tabel di File PDF
Aspose.PDF for C++ adalah pustaka C++ yang memungkinkan Anda membuat, membaca, dan memperbarui file PDF. Selain itu, API mendukung penggalian data dari tabel dalam file PDF. Anda dapat menginstal API melalui NuGet atau mengunduhnya langsung dari bagian unduhan.
PM> Install-Package Aspose.PDF.Cpp
Ekstrak Data dari Tabel PDF menggunakan C++
Berikut ini adalah langkah-langkah untuk mengekstrak data dari tabel PDF.
- Muat dokumen PDF menggunakan kelas Document.
- Ulangi halaman-halaman dokumen menggunakan metode Document->getPages().
- Di setiap iterasi, buat instance dari kelas TableAbsorber dan tentukan halaman untuk mengekstraksi tabel menggunakan metode TableAbsorber->Visit(System::SharedPtr halaman) metode.
- Dapatkan tabel menggunakan metode TableAbsorber->getTableList() dan ulangi tabel tersebut.
- Untuk setiap AbsorbedTable, ulangi baris menggunakan metode AbsorbedTable->getRowList().
- Untuk setiap AbsorbedRow, lakukan iterasi melalui sel menggunakan metode AbsorbedRow->getCellList().
- Dapatkan TextFragmentCollection untuk setiap AbsorbedCell menggunakan metode AbsorbedCell->getTextFragments() dan ulangi.
- Dapatkan TextSegmentCollection untuk setiap TextFragment menggunakan metode TextFragment->getSegments() dan ulangi.
- Ambil teks dari setiap TextSegment dan cetak.
Kode contoh berikut menunjukkan cara mengekstrak data dari tabel PDF menggunakan C++.
// Muat dokumen PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// Ulangi halaman-halaman dokumen
for (auto page : pdfDocument->get_Pages())
{
// Buat instance dari kelas TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterasi melalui tabel
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// Iterasi melalui baris
for (auto row : table->get_RowList())
{
// Ulangi melalui sel
for (auto cell : row->get_CellList())
{
// Ulangi melalui fragmen teks
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Ulangi melalui segmen teks
for (auto seg : fragment->get_Segments())
{
// Dapatkan teksnya
string = String::Concat(string, seg->get_Text());
}
// Cetak teks
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
Ekstrak Data dari Tabel di Area Tertentu Halaman PDF
Untuk mengekstrak data dari tabel di area tertentu pada halaman PDF, ikuti langkah-langkah di bawah ini.
- Muat dokumen PDF menggunakan kelas Document.
- Ambil halaman yang berisi tabel menggunakan metode Document->getPages()->idxget(int32t index).
- Ulangi anotasi dan dapatkan anotasi persegi.
- Buat instance dari kelas TableAbsorber dan tentukan halaman untuk mengekstrak tabel menggunakan TableAbsorber->Visit(System::SharedPtr halaman) metode.
- Dapatkan tabel menggunakan metode TableAbsorber->getTableList() dan ulangi tabel tersebut.
- Jika tabel berada di wilayah, lakukan langkah-langkah berikut:
- Ulangi baris-baris AbsorbedTable menggunakan metode AbsorbedTable->getRowList().
- Untuk setiap AbsorbedRow, lakukan iterasi melalui sel menggunakan metode AbsorbedRow->getCellList().
- Dapatkan TextFragmentCollection untuk setiap AbsorbedCell menggunakan metode AbsorbedCell->getTextFragments() dan ulangi.
- Dapatkan TextSegmentCollection untuk setiap TextFragment menggunakan metode TextFragment->getSegments() dan ulangi.
- Ambil teks dari setiap TextSegment dan cetak.
Kode contoh berikut menunjukkan cara mengekstrak data dari tabel di area tertentu halaman PDF menggunakan C++.
// Muat dokumen PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// Dapatkan halaman pertama dokumen
auto page = pdfDocument->get_Pages()->idx_get(1);
// Iterasi melalui anotasi pada halaman
for (auto annotation : page->get_Annotations())
{
// Periksa jenis anotasi
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// Buat instance dari kelas TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// Iterasi melalui tabel
for (auto table : absorber->get_TableList())
{
// Periksa apakah tabel ada di wilayah tersebut
if ((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())
)
{
// Iterasi melalui baris
for (auto row : table->get_RowList())
{
// Ulangi melalui sel
for (auto cell : row->get_CellList())
{
// Ulangi melalui fragmen teks
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// Ulangi melalui segmen teks
for (auto seg : fragment->get_Segments())
{
// Dapatkan teksnya
string = String::Concat(string, seg->get_Text());
}
// Cetak teks
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
Dapatkan Lisensi Gratis
Untuk mencoba API tanpa batasan evaluasi, Anda dapat meminta lisensi sementara gratis.
Kesimpulan
Pada artikel ini, Anda telah mempelajari cara mengekstrak data dari tabel PDF menggunakan C++. Selain itu, Anda telah mempelajari cara mengekstrak data dari tabel di wilayah tertentu pada halaman PDF. Aspose.PDF for C++ API menyediakan banyak fitur tambahan untuk bekerja dengan file PDF. Anda dapat menjelajahi API secara mendetail dengan mengunjungi dokumentasi resmi. Jika ada pertanyaan, jangan ragu untuk menghubungi kami di forum dukungan gratis.