PDF เป็นหนึ่งในรูปแบบเอกสารที่ใช้บังคับในปัจจุบัน รองรับข้อความ กราฟิก ตาราง คำอธิบายประกอบ และองค์ประกอบอื่นๆ ที่หลากหลาย ในบางกรณี คุณอาจต้องแยกข้อมูลจากตารางในเอกสาร PDF เช่น ใบแจ้งหนี้ บทความนี้ครอบคลุมวิธีการแยกข้อมูลจากตารางใน PDF โดยใช้ Java เพื่อให้บรรลุเป้าหมายนี้
- Java API เพื่อดึงข้อมูลจากตารางในรูปแบบ PDF
- แยกข้อมูลจากตารางในรูปแบบ PDF
- แยกตารางออกจากพื้นที่เฉพาะของหน้า
แยกข้อมูลจากตารางใน PDF - Java API
Aspose.PDF for Java คือ API ที่มีคุณลักษณะหลากหลายสำหรับการสร้างและจัดการเอกสาร PDF เราจะใช้ API นี้เพื่อแยกข้อมูลจากตารางในเอกสาร PDF คุณสามารถ ดาวน์โหลด JAR ของ API หรือติดตั้งภายในแอปพลิเคชัน Java โดยใช้การกำหนดค่า Maven ต่อไปนี้
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>21.9</version>
</dependency>
การดึงข้อมูลจากตารางใน PDF ใน Java
ต่อไปนี้เป็นขั้นตอนในการแยกข้อมูลจากตารางใน PDF โดยใช้ Java
- ก่อนอื่น ให้โหลดเอกสาร PDF โดยใช้คลาส Document
- วนซ้ำหน้าต่างๆ ใน PDF โดยใช้ชุด Document.getPages()
- ในการวนซ้ำแต่ละครั้ง ให้เริ่มต้นวัตถุ TableAbsorber และไปที่หน้าที่เลือกโดยใช้เมธอด TableAbsorber.visit(Page)
- ในลูปที่ซ้อนกัน ให้วนซ้ำผ่านรายการของตารางในคอลเล็กชัน TableAbsorber.getTableList()
- สำหรับแต่ละ AbsorbedTable ในคอลเล็กชัน ให้วนซ้ำผ่านคอลเล็กชันของแถวจาก AbsorbedTable.getRowList()
- สำหรับแต่ละ AbsorbedRow ในคอลเล็กชัน ให้วนซ้ำผ่านคอลเล็กชันของเซลล์จาก AbsorbedRow.getCellList()
- สุดท้าย วนซ้ำคอลเลกชัน TextFragment ของแต่ละ AbsorbedCell แล้วพิมพ์ข้อความ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกข้อความจากตารางใน PDF โดยใช้ Java
// โหลดเอกสาร PDF ต้นทาง
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// สร้างตัวดูดซับตาราง
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
// สแกนหน้า
for (com.aspose.pdf.Page page : pdfDocument.getPages()) {
// เยี่ยมชมหน้า
absorber.visit(page);
// วนซ้ำผ่านตาราง
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
System.out.println("Table");
// วนซ้ำรายการของแถว
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
// วนซ้ำรายการของเซลล์
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
// วนซ้ำผ่านส่วนย่อยของข้อความ
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
Java: แยกข้อมูลตารางออกจากพื้นที่เฉพาะของหน้า PDF
ต่อไปนี้เป็นขั้นตอนในการแยกตารางออกจากส่วนใดส่วนหนึ่งของหน้าใน PDF โดยใช้ Java
- ก่อนอื่น ให้โหลดเอกสาร PDF โดยใช้คลาส Document
- จากนั้น เลือก Page ที่ต้องการจากคอลเลกชั่น Document.getPages()
- แยกคำอธิบายประกอบ Square ของหน้า
- ในการวนซ้ำแต่ละครั้ง ให้เริ่มต้นวัตถุ TableAbsorber และไปที่หน้าที่เลือกโดยใช้เมธอด TableAbsorber.visit(Page)
- ในลูปที่ซ้อนกัน ให้วนซ้ำผ่านรายการของตารางในคอลเลกชัน TableAbsorber.getTableList()
- ตรวจสอบว่าตารางที่ดูดซับอยู่ในพื้นที่หน้าที่ต้องการหรือไม่
- สำหรับ AbsorbedTable แต่ละรายการในคอลเล็กชัน ให้ทำซ้ำตามคอลเล็กชันของแถวโดยใช้ AbsorbedTable.getRowList()
- สำหรับแต่ละ AbsorbedRow ในคอลเล็กชัน ให้ทำซ้ำผ่านคอลเล็กชันของเซลล์โดยใช้ AbsorbedRow.getCellList()
- สุดท้าย วนซ้ำคอลเลกชัน TextFragment ของแต่ละ AbsorbedCell แล้วพิมพ์ข้อความ
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีแยกตารางจากพื้นที่เฉพาะของหน้า PDF
// โหลดเอกสาร PDF ต้นทาง
com.aspose.pdf.Document pdfDocument = new com.aspose.pdf.Document("sample.pdf");
// รับการอ้างอิงของหน้าที่ต้องการ
com.aspose.pdf.Page page = pdfDocument.getPages().get_Item(1);
// สร้างตัวเลือกคำอธิบายประกอบ
com.aspose.pdf.AnnotationSelector annotationSelector = new com.aspose.pdf.AnnotationSelector(
new com.aspose.pdf.SquareAnnotation(page, com.aspose.pdf.Rectangle.getTrivial()));
// รับรายการคำอธิบายประกอบ
java.util.List<com.aspose.pdf.Annotation> list = annotationSelector.getSelected();
if (list.size() == 0) {
System.out.println("Marked tables not found..");
return;
}
// สร้างคำอธิบายประกอบสี่เหลี่ยมจัตุรัส
com.aspose.pdf.SquareAnnotation squareAnnotation = (com.aspose.pdf.SquareAnnotation) list.get(0);
// สร้างตัวดูดซับตารางและเยี่ยมชมหน้า
com.aspose.pdf.TableAbsorber absorber = new com.aspose.pdf.TableAbsorber();
absorber.visit(page);
// ทำซ้ำผ่านตาราง
for (com.aspose.pdf.AbsorbedTable table : absorber.getTableList()) {
{
// ตรวจสอบว่ามีตารางอยู่
boolean isInRegion = (squareAnnotation.getRect().getLLX() < table.getRectangle().getLLX())
&& (squareAnnotation.getRect().getLLY() < table.getRectangle().getLLY())
&& (squareAnnotation.getRect().getURX() > table.getRectangle().getURX())
&& (squareAnnotation.getRect().getURY() > table.getRectangle().getURY());
if (isInRegion) {
for (com.aspose.pdf.AbsorbedRow row : table.getRowList()) {
{
for (com.aspose.pdf.AbsorbedCell cell : row.getCellList()) {
for (com.aspose.pdf.TextFragment fragment : cell.getTextFragments()) {
StringBuilder sb = new StringBuilder();
for (com.aspose.pdf.TextSegment seg : fragment.getSegments())
sb.append(seg.getText());
System.out.print(sb.toString() + "|");
}
}
System.out.println();
}
}
}
}
}
รับใบอนุญาตฟรี
คุณสามารถใช้ Aspose.PDF for Java ได้โดยไม่มีข้อจำกัดในการประเมินโดยใช้ ใบอนุญาตชั่วคราว
บทสรุป
ในบทความนี้ คุณได้เรียนรู้วิธีแยกข้อมูลจากตารางใน PDF โดยใช้ Java นอกจากนี้ บทความยังกล่าวถึงวิธีแยกตารางจากพื้นที่เฉพาะของหน้าในรูปแบบ PDF นอกจากนี้ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับ Aspose.PDF for Java โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถถามคำถามผ่าน ฟอรัม ของเรา