使用Java从多个PDF中提取文本

时间:2017-08-27 03:58:18

标签: java pdf pdftotext

我有超过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转换为文本。

谢谢, 阿伦

2 个答案:

答案 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);
}