我有超过1000个PDF文件,需要从中提取文本并加载到.txt文件中。我可以获得单个PDF文件的代码,但不能从多个PDF获得成功。我的代码如下 -
主要
package pdftest;`
import java.io.File;
import java.io.IOException;
public class JavaPDFTest {
public static void main(String[] args) throws IOException {
String path = "C:\\Users\\arunk01\\Desktop\\Java_Extraction\\";
String files;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++)
{
if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
if (files.endsWith(".pdf") || files.endsWith(".PDF"))
{
System.out.println(files);
String nfiles = "C:\\Users\\arunk01\\Desktop\\Java_Extraction\\";
PDFManager pdfManager = new PDFManager();
String pdfToText = pdfManager.pdftoText(nfiles+files);
if (pdfToText == null) {
System.out.println("PDF to Text Conversion failed.");
}
else {
System.out.println("\nThe text parsed from the PDF Document....\n" + pdfToText);
pdfManager.writeTexttoFile(pdfToText,nfiles+files+".txt");
}
}
}
}
}
}
类
package pdftest;
import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.cos.COSDocument;
import org.apache.pdfbox.io.RandomAccessFile;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class PDFManager {
private PDFParser parser;
private PDFTextStripper pdfStripper;
private PDDocument pdDoc ;
private COSDocument cosDoc ;
private String pdftoText;
private String Text ;
private String filePath;
private File file;
public PDFManager() {
}
public String ToText() throws IOException
{
this.pdfStripper = null;
this.pdDoc = null;
this.cosDoc = null;
file = new File(filePath);
parser = new PDFParser(new RandomAccessFile(file,"r")); // update for PDFBox V 2.0
parser.parse();
cosDoc = parser.getDocument();
pdfStripper = new PDFTextStripper();
pdDoc = new PDDocument(cosDoc);
pdDoc.getNumberOfPages();
pdfStripper.setStartPage(1);
// pdfStripper.setEndPage(10);
// reading text from page 1 to 10
// if you want to get text from full pdf file use this code
pdfStripper.setEndPage(pdDoc.getNumberOfPages());
Text = pdfStripper.getText(pdDoc);
return Text;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
public String pdftoText(String string) {
// TODO Auto-generated method stub
return Text;
}
public void writeTexttoFile(String pdfToText2, String string) {
// TODO Auto-generated method stub
}
}
我没有收到任何错误,但它说PDF到文本转换失败(点击Main中的if条件)
2016__00002685__00.PDF
PDF to Text Conversion failed.
2016__00002685__01.PDF
PDF to Text Conversion failed.
2016__100018__00.PDF
PDF to Text Conversion failed.
2016__100018__01.PDF
PDF to Text Conversion failed.
有人可以帮助我使用代码将多个PDF转换为文本。
谢谢, 阿伦
答案 0 :(得分:1)
pdftoText
类中的 PDFManager
方法返回null的文本。您需要调用ToText
方法。试试这个:
public String pdftoText(String filePath) throws IOException {
this.setFilePath(filePath);
return ToText();
}
答案 1 :(得分:0)
除了@Unknown的回答,以下内容可以帮助PDFManager
。如果pdfToText()
中的ToText()
或PDFManager
只有一种方法可能会更好。
public String ToText() throws IOException{
PDDocument pdDoc=PDDocument(new File(filePath));
//startPage=1 endPage=Integer.MAX_VALUE by default.
return pdfStripper.getText(pdDoc);
}