ไฟล์ PDF เป็นรูปแบบมาตรฐานสำหรับการแลกเปลี่ยนเอกสารทางอินเทอร์เน็ต เอกสารต่างๆ เช่น ใบแจ้งหนี้และคู่มือผลิตภัณฑ์มักแชร์กันในรูปแบบ PDF อาจมีสถานการณ์ที่คุณมีใบแจ้งหนี้หลายใบที่มีข้อมูลแบบตารางซึ่งคุณต้องแยกและประมวลผลเพิ่มเติม การดึงข้อมูลนี้โดยทางโปรแกรมจะมีประสิทธิภาพมากกว่า ด้วยเหตุนี้ บทความนี้จะสอนวิธีดึงข้อมูลจากตาราง PDF โดยใช้ C++
- C ++ API สำหรับการดึงข้อมูลจากตารางในไฟล์ PDF
- แยกข้อมูลจากตาราง PDF โดยใช้ C ++
- แยกข้อมูลจากตารางในพื้นที่เฉพาะของหน้า PDF
C ++ API สำหรับการดึงข้อมูลจากตารางในไฟล์ PDF
Aspose.PDF for C++ คือไลบรารี C++ ที่ให้คุณสร้าง อ่าน และอัปเดตไฟล์ PDF นอกจากนี้ API ยังรองรับการแยกข้อมูลจากตารางในไฟล์ PDF คุณสามารถติดตั้ง API ผ่าน NuGet หรือดาวน์โหลดโดยตรงจากส่วน ดาวน์โหลด
PM> Install-Package Aspose.PDF.Cpp
แยกข้อมูลจากตาราง PDF โดยใช้ C ++
ต่อไปนี้เป็นขั้นตอนในการดึงข้อมูลจากตาราง PDF
- โหลดเอกสาร PDF โดยใช้คลาส Document
- ทำซ้ำผ่านหน้าเอกสารโดยใช้เมธอด Document->getPages()
- ในการวนซ้ำแต่ละครั้ง ให้สร้างอินสแตนซ์ของคลาส TableAbsorber และระบุหน้าสำหรับแยกตารางโดยใช้ TableAbsorber->Visit(System::SharedPtr หน้า) วิธีการ
- รับตารางโดยใช้เมธอด TableAbsorber->getTableList() และวนซ้ำ
- สำหรับแต่ละ AbsorbedTable ให้วนซ้ำแถวโดยใช้เมธอด AbsorbedTable->getRowList()
- สำหรับแต่ละ AbsorbedRow ให้ทำซ้ำผ่านเซลล์โดยใช้เมธอด AbsorbedRow->getCellList()
- รับ TextFragmentCollection สำหรับแต่ละ AbsorbedCell โดยใช้เมธอด AbsorbedCell->getTextFragments() และวนซ้ำ
- รับ TextSegmentCollection สำหรับแต่ละ TextFragment โดยใช้เมธอด TextFragment->getSegments() และวนซ้ำ
- ดึงข้อความจากแต่ละ TextSegment แล้วพิมพ์ออกมา
โค้ดตัวอย่างต่อไปนี้แสดงวิธีการแยกข้อมูลจากตาราง PDF โดยใช้ C++
// โหลดเอกสาร PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input3.pdf");
// ทำซ้ำผ่านหน้าเอกสาร
for (auto page : pdfDocument->get_Pages())
{
// สร้างอินสแตนซ์ของคลาส TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// ทำซ้ำผ่านตาราง
for (auto table : absorber->get_TableList())
{
Console::WriteLine(u"Table");
// ทำซ้ำผ่านแถว
for (auto row : table->get_RowList())
{
// ทำซ้ำผ่านเซลล์
for (auto cell : row->get_CellList())
{
// วนซ้ำผ่านส่วนของข้อความ
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// วนซ้ำผ่านส่วนข้อความ
for (auto seg : fragment->get_Segments())
{
// รับข้อความ
string = String::Concat(string, seg->get_Text());
}
// พิมพ์ข้อความ
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
แยกข้อมูลจากตารางในพื้นที่เฉพาะของหน้า PDF
ในการดึงข้อมูลจากตารางในพื้นที่เฉพาะของหน้า PDF โปรดทำตามขั้นตอนด้านล่าง
- โหลดเอกสาร PDF โดยใช้คลาส Document
- ดึงหน้าที่มีตารางโดยใช้เมธอด Document->getPages()->idxget(int32t index)
- วนรอบคำอธิบายประกอบและรับคำอธิบายประกอบแบบสี่เหลี่ยม
- สร้างอินสแตนซ์ของคลาส TableAbsorber และระบุหน้าสำหรับแยกตารางโดยใช้ TableAbsorber->Visit(System::SharedPtr หน้า) วิธี
- รับตารางโดยใช้เมธอด TableAbsorber->getTableList() และวนซ้ำ
- หากตารางอยู่ในพื้นที่ ให้ทำตามขั้นตอนต่อไปนี้:
- ทำซ้ำผ่านแถวของ AbsorbedTable โดยใช้เมธอด AbsorbedTable->getRowList()
- สำหรับแต่ละ AbsorbedRow ให้ทำซ้ำผ่านเซลล์โดยใช้เมธอด AbsorbedRow->getCellList()
- รับ TextFragmentCollection สำหรับแต่ละ AbsorbedCell โดยใช้เมธอด AbsorbedCell->getTextFragments() และวนซ้ำ
- รับ TextSegmentCollection สำหรับแต่ละ TextFragment โดยใช้เมธอด TextFragment->getSegments() และวนซ้ำ
- ดึงข้อความจากแต่ละ TextSegment แล้วพิมพ์ออกมา
โค้ดตัวอย่างต่อไปนี้สาธิตวิธีแยกข้อมูลจากตารางในพื้นที่เฉพาะของหน้า PDF โดยใช้ C++
// โหลดเอกสาร PDF
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\PDF\\Table_input4.pdf");
// รับหน้าแรกของเอกสาร
auto page = pdfDocument->get_Pages()->idx_get(1);
// ย้ำผ่านคำอธิบายประกอบในหน้า
for (auto annotation : page->get_Annotations())
{
// ตรวจสอบประเภทคำอธิบายประกอบ
if (annotation->get_AnnotationType() == Annotations::AnnotationType::Square)
{
System::SharedPtr<SquareAnnotation> squareAnnotation = DynamicCast<SquareAnnotation>(annotation);
// สร้างอินสแตนซ์ของคลาส TableAbsorber
auto absorber = MakeObject<TableAbsorber>();
absorber->Visit(page);
// ทำซ้ำผ่านตาราง
for (auto table : absorber->get_TableList())
{
// ตรวจสอบว่าตารางอยู่ในภูมิภาคหรือไม่
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())
)
{
// ทำซ้ำผ่านแถว
for (auto row : table->get_RowList())
{
// ทำซ้ำผ่านเซลล์
for (auto cell : row->get_CellList())
{
// วนซ้ำผ่านส่วนของข้อความ
for (auto fragment : cell->get_TextFragments())
{
String string = u"";
// วนซ้ำผ่านส่วนข้อความ
for (auto seg : fragment->get_Segments())
{
// รับข้อความ
string = String::Concat(string, seg->get_Text());
}
// พิมพ์ข้อความ
Console::WriteLine(string);
}
}
Console::WriteLine();
}
}
}
break;
}
}
รับใบอนุญาตฟรี
หากต้องการลองใช้ API โดยไม่มีข้อจำกัดในการประเมิน คุณสามารถขอ ใบอนุญาตชั่วคราวฟรี
บทสรุป
ในบทความนี้ คุณได้เรียนรู้วิธีแยกข้อมูลจากตาราง PDF โดยใช้ C++ นอกจากนี้ คุณได้เรียนรู้วิธีแยกข้อมูลจากตารางในพื้นที่เฉพาะของหน้า PDF Aspose.PDF for C++ API มีคุณสมบัติเพิ่มเติมมากมายสำหรับการทำงานกับไฟล์ PDF คุณสามารถสำรวจ API โดยละเอียดได้โดยไปที่ เอกสารอย่างเป็นทางการ ในกรณีที่มีคำถามใดๆ โปรดติดต่อเราได้ที่ ฟอรัมสนับสนุนฟรี