gpt4 book ai didi

java - 使用java将PDF转换为CSV

转载 作者:行者123 更新时间:2023-11-30 12:07:57 25 4
gpt4 key购买 nike

我已经尝试了堆栈溢出和外部的大部分事情

问题:我有一个包含内容和表格的 pdf 文件。我还需要解析表格和内容。

API : 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

我试过使用 -c,--columns <COLUMNS>白板的这是通过列边界的 X 坐标获取单元格

但问题是我的 pdf 内容是动态的。即表格大小已更改。

stack overflow 中的这些链接以及更多功能对我有用。

How to convert PDF to CSV with tabula-py?

How to extract table data from PDF as CSV from the command line?

Convert PDF to Excel in Java

How to convert a pdf file into CSV file?

itext Converting PDF to csv

Parse PDF table and display it as CSV(Java)

我使用了 pdf 框,它给出了未格式化的文本,我无法正确阅读表格内容。

可以在不丢失内容和格式的情况下使用 java 将带有表格的 pdf 转换为 csv/excel

我不想使用付费图书馆。

最佳答案

请在此处查看任何使用 Java 将 PDF 提取为 CSV 的示例:https://github.com/pdftables/java-pdftables-api .每个页面都是独立考虑的,因此 PDF 的动态特性应该不是问题。您可以在他们的网站上使用免费试用版。

package com.pdftables.examples;

import java.io.File;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class ConvertToFile {
private static List<String> formats = Arrays.asList(new String[] { "csv", "xml", "xlsx-single", "xlsx-multiple" });

public static void main(String[] args) throws Exception {
if (args.length != 3) {
System.out.println("Command line: <API_KEY> <FORMAT> <PDF filename>");
System.exit(1);
}

final String apiKey = args[0];
final String format = args[1].toLowerCase();
final String pdfFilename = args[2];

if (!formats.contains(format)) {
System.out.println("Invalid output format: \"" + format + "\"");
System.exit(1);
}

// Avoid cookie warning with default cookie configuration
RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();

File inputFile = new File(pdfFilename);

if (!inputFile.canRead()) {
System.out.println("Can't read input PDF file: \"" + pdfFilename + "\"");
System.exit(1);
}

try (CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(globalConfig).build()) {
HttpPost httppost = new HttpPost("https://pdftables.com/api?format=" + format + "&key=" + apiKey);
FileBody fileBody = new FileBody(inputFile);

HttpEntity requestBody = MultipartEntityBuilder.create().addPart("f", fileBody).build();
httppost.setEntity(requestBody);

System.out.println("Sending request");

try (CloseableHttpResponse response = httpclient.execute(httppost)) {
if (response.getStatusLine().getStatusCode() != 200) {
System.out.println(response.getStatusLine());
System.exit(1);
}
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
final String outputFilename = getOutputFilename(pdfFilename, format.replaceFirst("-.*$", ""));
System.out.println("Writing output to " + outputFilename);

final File outputFile = new File(outputFilename);
FileUtils.copyToFile(resEntity.getContent(), outputFile);
} else {
System.out.println("Error: file missing from response");
System.exit(1);
}
}
}
}

private static String getOutputFilename(String pdfFilename, String suffix) {
if (pdfFilename.length() >= 5 && pdfFilename.toLowerCase().endsWith(".pdf")) {
return pdfFilename.substring(0, pdfFilename.length() - 4) + "." + suffix;
} else {
return pdfFilename + "." + suffix;
}
}
}

关于java - 使用java将PDF转换为CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54534127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com