如何使用 GroupDocs.Parser 進行 Java PDF 表格提取

在本完整教學中,您將學習如何使用 GroupDocs.Parser 函式庫執行 java pdf table extraction。無論您需要提取財務表格、發票項目或研究資料,本指南都會指導您檢查文件支援、定義精確的表格佈局,並有效地提取資料以供後續 Java 處理使用。

快速解答

  • GroupDocs.Parser 能從 PDF 讀取表格嗎? 是 – 它提供原生的 PDF 以及其他多種格式的表格提取功能。
  • 開發時需要授權嗎? 您可以先使用免費試用版;在正式環境中需要授權。
  • 需要哪個 Java 版本? JDK 8 或更高版本。
  • Maven 是唯一加入此函式庫的方式嗎? 否 – 您也可以直接下載 JAR。
  • 這能處理受密碼保護的檔案嗎? 是,只需在建立 Parser 實例時提供密碼。

什麼是 java pdf table extraction?

Java pdf table extraction 是使用 Java 程式碼以程式化方式讀取嵌入於 PDF(或 Word)檔案中的表格結構的過程。GroupDocs.Parser 抽象化低層解析,將每個儲存格以純文字返回,方便進行分析或匯入資料庫。它同時支援掃描版與原生 PDF,能處理合併儲存格與跨頁表格,且無需額外設定。

為何使用 GroupDocs.Parser 進行表格提取?

GroupDocs.Parser 支援 50+ 種輸入與輸出格式——包括 PDF、DOCX、PPTX 與 HTML——讓您可以在不同文件類型間重複使用相同的 API。其基於佈局的提取在複雜表格上可達 最高 98 % 的準確率,且函式庫透過串流方式處理上百頁的 PDF,將記憶體使用量控制在 200 MB 以下。

前置條件

  • 已安裝 Java Development Kit (JDK) 8+。
  • 用於相依管理的 Maven(或手動 JAR 處理)。
  • 具備 Java 語法與物件導向概念的基本認識。

為 Java 設定 GroupDocs.Parser

Maven 設定

如果您使用 Maven 管理相依性,請將以下儲存庫與相依性加入您的 pom.xml:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/parser/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-parser</artifactId>
      <version>25.5</version>
   </dependency>
</dependencies>

直接下載

或者,直接從 GroupDocs.Parser for Java releases 下載最新版本。請依照其網站提供的安裝說明操作。

取得授權

若要完整使用 GroupDocs.Parser 功能,建議取得授權。您可以先使用免費試用版,或依照 購買頁面 的步驟取得臨時授權。

設定完成後,讓我們進一步進行實際的 java pdf table extraction 實作。

實作指南

檢查文件是否支援表格提取

此文件是否支援表格提取?
首先需要確認目標檔案能否進行表格處理。GroupDocs.Parser 會公開一個功能旗標,告訴您該格式是否支援表格提取,從而避免執行時產生不必要的錯誤。

  • Parser 初始化: Parser 類別是載入文件至記憶體的入口點。
  • 功能檢查: 呼叫 parser.getFeatures().isTables();若支援表格提取則回傳 true。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.IDocumentInfo;

public class TableExtractionCheck {
    public static void main(String[] args) {
        try (Parser parser = new Parser("YOUR_DOCUMENT_DIRECTORY/your_document.pdf")) {
            // Check if the document supports table extraction.
            if (!parser.getFeatures().isTables()) {
                System.out.println("Document doesn't support table extraction.");
            } else {
                System.out.println("Document supports table extraction. Proceeding...");
                extractTablesFromDocument();
            }
        }
    }
}

建立表格佈局以進行提取

如何定義精確的表格佈局?
佈局告訴引擎欄位與列的起始位置,對於自動偵測可能遺漏合併儲存格或間距不規則的複雜 PDF 極為重要。

  • 欄列座標: 為每個欄位指定 X 軸的起始/結束位置,為每列指定 Y 軸位置。
  • TemplateTableLayout: 此物件儲存座標映射,稍後會傳遞給提取呼叫。
import com.groupdocs.parser.templates.TemplateTableLayout;

public class TableExtractionSetup {
    public static TemplateTableLayout createTemplateTableLayout() {
        return new TemplateTableLayout(
            java.util.Arrays.asList(new Double[]{50.0, 95.0, 275.0, 415.0, 485.0, 545.0}),
            java.util.Arrays.asList(new Double[]{325.0, 340.0, 365.0, 395.0})
        );
    }
}

從文件頁面提取表格

提取表格的逐步流程是什麼?
在確認支援與定義佈局後,您會遍歷每一頁,請求表格資料,並將結果收集至 Java 集合以供後續處理。

  • 頁面遍歷: 迴圈 parser.getPages() 以處理多頁 PDF。
  • 表格提取: 使用 parser.getTables(pageIndex, options),其中 options 包含先前定義的佈局。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.PageTableArea;
import com.groupdocs.parser.data.IDocumentInfo;
import com.groupdocs.parser.options.PageTableAreaOptions;

public class TableExtractionProcess {
    public static void extractTablesFromDocument() {
        try (Parser parser = new Parser("YOUR_DOCUMENT_DIRECTORY/your_document.pdf")) {
            IDocumentInfo documentInfo = parser.getDocumentInfo();
            if (documentInfo.getPageCount() > 0) {
                PageTableAreaOptions options = new PageTableAreaOptions(TableExtractionSetup.createTemplateTableLayout());

                for (int pageIndex = 0; pageIndex < documentInfo.getPageCount(); pageIndex++) {
                    Iterable<PageTableArea> tables = parser.getTables(pageIndex, options);
                    
                    for (PageTableArea table : tables) {
                        for (int row = 0; row < table.getRowCount(); row++) {
                            for (int column = 0; column < table.getColumnCount(); column++) {
                                PageTableAreaCell cell = table.getCell(row, column);
                                if (cell != null) {
                                    System.out.print(cell.getText() + " | ");
                                }
                            }
                            System.out.println();
                        }
                        System.out.println();
                    }
                }
            } else {
                System.out.println("Document has no pages.");
            }
        }
    }
}

java pdf table extraction 的實際應用

在多種實務情境中實作表格提取都相當有益:

  1. 資料分析: 從財務報告或科學論文中提取結構化資料,以供後續分析。
  2. 發票處理: 自動從發票中提取項目,並將資料匯入會計系統。
  3. 文件管理: 將提取的表格資料與全文內容一起索引,以提升 DMS 解決方案的可搜尋性。

效能考量

使用 GroupDocs.Parser 時的最佳效能建議如下:

  • 優化記憶體使用: 為大型 PDF 分配足夠的堆空間(例如 -Xmx2g)。
  • 批次處理: 將多個文件合併於同一工作,以減少 JVM 暖機開銷。
  • 有效的佈局: 精確的座標定義可縮小掃描範圍,將提取速度提升最高達 30 %。

常見問題與解決方案

問題原因解決方案
未返回表格佈局座標與實際表格位置不符使用檢視器的尺規核對 PDF 中的欄列座標。
記憶體不足錯誤整個大型文件一次載入使用串流模式或增加 JVM 堆積大小(-Xmx)。
空儲存格表格包含佈局未涵蓋的合併儲存格調整佈局以包含合併儲存格邊界,或在未使用佈局的情況下使用預設提取。

常見問答

Q: 我可以從其他文件格式提取表格嗎?
A: 可以,GroupDocs.Parser 支援 DOCX、PPTX、TXT 等多種格式。請參閱官方文件以取得完整清單。

Q: 開發版需要授權嗎?
A: 免費試用授權足以應付開發與測試。正式部署則需商業授權。

Q: GroupDocs.Parser 如何處理受密碼保護的 PDF?
A: 在建立 Parser 物件時提供密碼,例如 new Parser(filePath, password)。函式庫會自動解密檔案。

Q: 可以在未定義佈局的情況下提取表格嗎?
A: 可以,您可以直接呼叫 parser.getTables(pageIndex) 而不提供選項,但基於佈局的提取在複雜表格上能提供更高的準確度。

Q: 哪個版本的 GroupDocs.Parser 相容於 Java 11?
A: 本指南使用的 25.5 版完整支援 Java 8‑17,包括 Java 11。

結論

您現在已掌握使用 GroupDocs.Parser 進行 java pdf table extraction 的生產就緒方法。透過驗證文件功能、定義自訂的 TemplateTableLayout,以及遍歷頁面,您能可靠地提取結構化資料,以供任何後續的 Java 工作流程使用。

後續步驟

  • 在 documentation 中探索進階功能,如 表格合併、儲存格格式化 與 匯出為 CSV。
  • 嘗試不同的佈局設定,以因應文件集合中多樣的表格設計。

最後更新: 2026-09-17
測試環境: GroupDocs.Parser 25.5 for Java
作者: GroupDocs

相關教學