Tabula 看起来像是从 PDF 中提取表格数据的好工具。有很多关于如何从命令行调用它或在 Python 中使用它的示例,但似乎没有任何用于在 Java 中使用的文档。有没有人有一个有效的例子?
请注意,tabula 确实提供了源代码,但版本之间似乎很混淆。例如,GitHub 上的示例引用了 JAR 中似乎不存在的 TableExtractor 类。
Tabula 看起来像是从 PDF 中提取表格数据的好工具。有很多关于如何从命令行调用它或在 Python 中使用它的示例,但似乎没有任何用于在 Java 中使用的文档。有没有人有一个有效的例子?
请注意,tabula 确实提供了源代码,但版本之间似乎很混淆。例如,GitHub 上的示例引用了 JAR 中似乎不存在的 TableExtractor 类。
您可以使用以下代码从 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();
}
}
}
// ****** 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();
}