แยกข้อมูลจากตารางใน PDF Java

PDF เป็นหนึ่งในรูปแบบเอกสารที่ใช้บังคับในปัจจุบัน รองรับข้อความ กราฟิก ตาราง คำอธิบายประกอบ และองค์ประกอบอื่นๆ ที่หลากหลาย ในบางกรณี คุณอาจต้องแยกข้อมูลจากตารางในเอกสาร PDF เช่น ใบแจ้งหนี้ บทความนี้ครอบคลุมวิธีการแยกข้อมูลจากตารางใน PDF โดยใช้ Java เพื่อให้บรรลุเป้าหมายนี้

แยกข้อมูลจากตารางใน 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 โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถถามคำถามผ่าน ฟอรัม ของเรา

ดูสิ่งนี้ด้วย