用Java提取PDF表格到文本、CSV、Excel工作表-提取PDF表格数据写入CSV文件

时间:2024-09-29 14:23:01

我们也可以用同样的方法提取表格数据,然后搭配其他模块,如opencsv,将提取到的数据写入CSV文件。也可以使用下面的提取PDF表格写入Excel文件,最后保存时保存为CSV文件。
opencsv:

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>5.9</version>
</dependency>

以下是搭配opencsv提取PDF表格数据并写入CSV文件的操作步骤:

  1. 导入所需模块。
  2. 创建PdfDocument对象并使用PdfDocument.loadFromFile()方法载入PDF文档。
  3. 使用载入的PDF文档创建PdfTableExtractor对象。
  4. 历页面面,使用PdfTableExtractor.extractTable()方法提取每个页面上的所有表格。
  5. 遍历提取的表格,并构建CSV文件名。
  6. 创建CSVWriter对象,遍历表格行以及行中的列,使用PdfTable.getText()方法获取每个单元格的数据并去除换行符,将提取的每行表格数据构建为字符串列表。最后将字符串列表写入为CSV数据行。
  7. 释放资源。

代码示例

import com.opencsv.CSVWriter;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;

import java.io.FileWriter;
import java.io.IOException;

public classPDF表格提取到CSV {
    public static void main(String[] args) throws IOException {
        // 创建一个PdfDocument对象
        PdfDocument pdf = new PdfDocument();
        // 加载一个PDF文档
        pdf.loadFromFile("Sample.pdf");

        // 创建一个PdfTableExtractor对象
        PdfTableExtractor extractor = new PdfTableExtractor(pdf);

        // 从每一页中提取表格
        for (int pageIndex = 0; pageIndex < pdf.getPages().getCount(); pageIndex++) {
            PdfTable[] tables = extractor.extractTable(pageIndex);
            // 如果表格不为空,则遍历表格
            if (tables != null) {
                for (int tableIndex = 0; tableIndex < tables.length; tableIndex++) {
                    PdfTable table = tables[tableIndex];
                    // 创建CSV文件名
                    String csvFileName = "output/Tables/Page" + (pageIndex + 1) + "-Table" + (tableIndex + 1) + ".csv";
                    // 创建一个CSVWriter对象
                    try (CSVWriter writer = new CSVWriter(new FileWriter(csvFileName))) {
                        // 遍历行和列
                        for (int rowIndex = 0; rowIndex < table.getRowCount(); rowIndex++) {
                            String[] row = new String[table.getColumnCount()];
                            for (int colIndex = 0; colIndex < table.getColumnCount(); colIndex++) {
                                // 获取单元格文本并移除换行符
                                String cellText = table.getText(rowIndex, colIndex).replaceAll("\\r?\\n", "");
                                row[colIndex] = cellText;
                            }
                            // 将行写入CSV文件
                            writer.writeNext(row);
                        }
                    }
                }
            }
        }
        // 关闭PDF文档
        pdf.close();
    }
}

提取结果
Python提取PDF表格到CSV