为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Java 调用 tabula (JAR)?

如何从 Java 调用 tabula (JAR)?

收到一只叮咚 2021-11-24 16:03:54
Tabula 看起来像是从 PDF 中提取表格数据的好工具。有很多示例说明如何从命令行调用它或在 Python 中使用它,但似乎没有任何可用于 Java 的文档。有没有人有一个有效的例子?请注意,tabula 确实提供了源代码,但在版本之间似乎很混乱。例如,GitHub 上的示例引用了 JAR 中似乎不存在的 TableExtractor 类。https://github.com/tabulapdf/tabula-java
查看完整描述

2 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您可以使用以下代码从 Java 中调用 tabula,希望对您有所帮助


  public static void main(String[] args) throws IOException {

    final String FILENAME="../test.pdf";


    PDDocument pd = PDDocument.load(new File(FILENAME));


    int totalPages = pd.getNumberOfPages();

    System.out.println("Total Pages in Document: "+totalPages);


    ObjectExtractor oe = new ObjectExtractor(pd);

    SpreadsheetExtractionAlgorithm sea = new SpreadsheetExtractionAlgorithm();

    Page page = oe.extract(1);


    // extract text from the table after detecting

    List<Table> table = sea.extract(page);

    for(Table tables: table) {

        List<List<RectangularTextContainer>> rows = tables.getRows();


        for(int i=0; i<rows.size(); i++) {


            List<RectangularTextContainer> cells = rows.get(i);


            for(int j=0; j<cells.size(); j++) {

                System.out.print(cells.get(j).getText()+"|");

            }


           // System.out.println();

        }

    }


}


查看完整回答
反对 回复 2021-11-24
?
心有法竹

TA贡献1866条经验 获得超5个赞

// ****** Extract text from the table after detecting & TRANSFER TO XLSX *****

    XSSFWorkbook wb = new XSSFWorkbook();

    Sheet sheet = wb.createSheet("Barang Baik");

    List<Table> table = sea.extract(page);

    for (Table t : table) {

        int rowNumber = 0;

        try {

            while (sheet.getRow(rowNumber).getCell(0) != null) {

                rowNumber++;

            }

        } catch (Exception e) { }


        List<List<RectangularTextContainer>> rows = t.getRows();

        for (int i = 0; i < rows.size(); i++) {

            List<RectangularTextContainer> cells = rows.get(i);

            Row row = sheet.createRow(i+rowNumber);

            for (int j = 0; j < cells.size(); j++) {

                Cell cell = row.createCell(j);

                String cellValue = cells.get(j).getText();

                cell.setCellValue(cellValue);

            }

        }

        FileOutputStream fos = new FileOutputStream("C:\\your\\file.xlsx");

        wb.write(fos);

        fos.close();

    }


查看完整回答
反对 回复 2021-11-24
  • 2 回答
  • 0 关注
  • 464 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信