1. 程式人生 > 其它 >java從pdf中提取文字

java從pdf中提取文字

技術標籤:java大資料poimapreducejmeter

一(單檔案轉換):下載pdfbox包,百度搜pdfbox.(fontbox-1.8.16.jar和pdfbox-app-1.8.16.jar)

 1 package pdf;
 2 
 3 import java.io.FileInputStream;
 4 import java.io.FileOutputStream;
 5 import java.io.OutputStreamWriter;
 6 
 7 import org.apache.pdfbox.pdfparser.PDFParser;
 8 import org.apache.pdfbox.pdmodel.PDDocument;
 9 import org.apache.pdfbox.util.PDFTextStripper;
10 
11 /**
12  * 
13  * @author 大漢
14  *
15  */
16 public class PdfToTxt {
17 
18     public PdfToTxt() {
19         super();
20         // TODO Auto-generated constructor stub
21     }
22 
23     /**
24      * 
25      * @param filename
26      * @return
27      * @throws Exception
28      */
29     public String GetTextFromPdf(String filename) throws Exception {
30         
31         String content = null;    
32         PDDocument pdfdocument = null;
33         
34         FileInputStream is = new FileInputStream(filename);
35         PDFParser parser = new PDFParser(is);
36         
37         parser.parse();        
38         pdfdocument = parser.getPDDocument();     
39         PDFTextStripper stripper = new PDFTextStripper();
40          content = stripper.getText(pdfdocument);
41          return content;    
42          } 
43     
44     /**
45      * 
46      * @param args
47      */
48     public static void main(String[] args) {
49         PdfToTxt pdfToTxt = new PdfToTxt();
50         try {
51             //獲取pdf檔案路徑
52             String pdf = pdfToTxt.GetTextFromPdf("E:/2019a.pdf");
53             //輸出到txt檔案
54             OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:/aa.txt"));
55             osw.write(pdf);
56             osw.flush();
57             osw.close();
58         }catch (Exception e){
59             e.printStackTrace();
60         }
61         
62     }
63         
64 }

還可以這樣:(第二種方法)

  1 package pdf;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.io.OutputStreamWriter;
  6 import java.io.Writer;
  7 import java.net.MalformedURLException;
  8 import java.net.URL;
  9 
 10 import org.apache.pdfbox.pdmodel.PDDocument;
 11 import org.apache.pdfbox.util.PDFTextStripper;
 12 
 13 /**
 14  * 批量轉換
 15  * @author 大漢
 16  *
 17  */
 18 public class BatchPdfToTxt {
 19 
 20     public BatchPdfToTxt() {
 21         super();
 22         // TODO Auto-generated constructor stub
 23     }
 24 
 25     public static void readPdf(String file) throws Exception {
 26         // 是否排序
 27         boolean sort = false;
 28         // pdf檔名
 29         String pdfFile = file;
 30         // 輸入文字檔名稱
 31         String textFile = null;
 32         // 編碼方式
 33         String encoding = "UTF-8";
 34         // 開始提取頁數
 35         int startPage = 1;
 36         // 結束提取頁數
 37         int endPage = Integer.MAX_VALUE;
 38         // 檔案輸入流,生成文字檔案
 39         Writer output = null;
 40         // 記憶體中儲存的PDF Document
 41         PDDocument document = null;
 42         try {
 43             try {
 44                 // 首先當作一個URL來裝載檔案,如果得到異常再從本地檔案系統//去裝載檔案
 45                 URL url = new URL(pdfFile);
 46                 //注意引數已不是以前版本中的URL.而是File。
 47                 document = PDDocument.load(pdfFile);
 48                 // 獲取PDF的檔名
 49                 String fileName = url.getFile();
 50                 // 以原來PDF的名稱來命名新產生的txt檔案
 51                 if (fileName.length() > 4) {
 52                     File outputFile = new File(fileName.substring(0, fileName.length() - 4)+ ".txt");
 53                     textFile ="E:/"+outputFile.getName();
 54                 }
 55             } catch (MalformedURLException e) {
 56                 // 如果作為URL裝載得到異常則從檔案系統裝載
 57                 //注意引數已不是以前版本中的URL.而是File。
 58                 document = PDDocument.load(pdfFile);
 59                 if (pdfFile.length() > 4) {
 60                     textFile = pdfFile.substring(0, pdfFile.length() - 4)+ ".txt";
 61                 }
 62             }
 63             // 檔案輸入流,寫入檔案倒textFile
 64             output = new OutputStreamWriter(new FileOutputStream(textFile),encoding);
 65             // PDFTextStripper來提取文字
 66             PDFTextStripper stripper = null;
 67             stripper = new PDFTextStripper();
 68             // 設定是否排序
 69             stripper.setSortByPosition(sort);
 70             // 設定起始頁
 71             stripper.setStartPage(startPage);
 72             // 設定結束頁
 73             stripper.setEndPage(endPage);
 74             // 呼叫PDFTextStripper的writeText提取並輸出文字
 75             stripper.writeText(document, output);
 76             
 77             System.out.println(textFile + " 輸出成功!");
 78         } finally {
 79             if (output != null) {
 80                 // 關閉輸出流
 81                 output.close();
 82             }
 83             if (document != null) {
 84                 // 關閉PDF Document
 85                 document.close();
 86             }
 87         }
 88     }
 89     /**
 90      * 
 91      * @param args
 92      */
 93     public static void main(String[] args) {
 94         try {
 95             //注意此處的絕對地址格式,最好要用這一種。
 96             readPdf("E:/使用者行為排序演算法.pdf");
 97         } catch (Exception e) {
 98             e.printStackTrace();
 99         }
100     }
101 }

效果圖:

總結:唯一的缺點是不能顯示圖片,請看下一篇:----------------------->>>>>>>>PDF轉WORD.