java從pdf中提取文字
阿新 • • 發佈:2021-02-14
技術標籤: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.