我尝试了Stack Overflow和外部的大多数解决方案。
问题: 我有一个包含内容和表格的pdf文件。 我需要解析表格和内容。
APIs:
https://github.com/tabulapdf/tabula-java
我正在使用tabula-java
,但它忽略了一些内容,并且表格单元格内的内容没有以正确的方式分离。
我的PDF文档具有以下内容:
DATE :1/1/2018 ABCD SCODE:FFFT
--ACCEPTED--
USER:ADMIN BATCH:RR EEE
CON BATCH
=======================================================================
MAIN SNO SUB VALUE DIS %
R 12 rr1 0125 24.5
SLNO DESC QTY TOTAL CODE FREE
1 ABD 12 90 BBNEW -NILL-
2 XDF 45 55 GHT55 MRP
3 QWE 08 77 CAT -NILL-
=======================================================================
MAIN SNO SUB VALUE DIS %
QW 14 rr2 0122 24.5
SLNO DESC QTY TOTAL CODE FREE
1 ABD 12 90 BBNEW -NILL-
2 XDF 45 55 GHT55 MRP
3 QWE 08 77 CAT -NILL-
用Tabula代码进行转换:
public static void toCsv() throws ParseException {
String commandLineOptions[] = { "-p", "1", "-o", "$csv", };
CommandLineParser parser = new DefaultParser();
try {
CommandLine line = parser.parse(TabulaUtil.buildOptions(), commandLineOptions);
new TabulaUtil(System.out, line).extractFileInto(
new File("/home/sample/firstPage.pdf"),
new File("/home/sample/onePage.csv"));
} catch (Exception e) {
e.printStackTrace();
}
}
tabula甚至支持命令行界面
java -jar TabulaJar/tabula-1.0.2-jar-with-dependencies.jar -p all -o $csv -b Pdfs
我尝试使用tabula的
-c,--columns <COLUMNS>
选项,该选项按列边界的X坐标获取单元格。但问题是我的PDF内容是动态的,即表格大小随时间而变化。在Stack Overflow上有很多解决方案,但都不适用于我。以下是这些解答: 如何使用tabula-py将PDF转换为CSV? 如何从命令行中提取PDF表格数据并转换为CSV? 在Java中将PDF转换为Excel 如何将PDF文件转换为CSV文件? iText将PDF转换为CSV 解析PDF表格并将其显示为CSV(Java) 我已经尝试过使用PDF Box,但由于其提供的文本格式不规范,导致无法正确读取表格内容。
是否可能在Java中将带有表格的PDF转换为CSV / Excel而不会丢失内容和格式? 我不想使用收费的库。