Java pdf轉String 並修正格式


在嘗試pdf轉成String的時候,首先用python的pdfminer和pdfminer3k去嘗試轉換,然后資料看不太懂,就嘗試用了java,

以下是java的pdfbox寫的pdf轉String函數(main函數沒有貼出來,直接用的一個全局函數)  需要加入的包有

百度搜一下pdfbox去官網下載一個放在lib里就行了

 

然后比較重要的突破是能把原來生成格式比較混亂的String處理成比較能看的String

效果如下:

沒有轉換前輸出格式如下

轉換后格式:

 

 

 代碼如下:

import java.io.*;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
 
         
public static String  getText(String file) throws Exception {
// 是否排序
boolean sort = false;
// PDF的本地路徑或者url
String pdfFile = file;
// 編碼方式
String encoding = "UTF-8";
// 開始提取頁數
int startPage = 1;
// 結束提取頁數
int endPage = Integer.MAX_VALUE;
// 文件輸入流,生成文本文件
Writer output = null;
// 內存中存儲的PDF Document
PDDocument document = null;
try{

// 采用PDFTextStripper提取文本
PDFTextStripper stripper = new PDFTextStripper();
// 設置是否排序
stripper.setSortByPosition(sort);
// 設置起始頁
stripper.setStartPage(startPage);
// 設置結束頁
stripper.setEndPage(endPage);
String text = stripper.getText(document);

//嘗試把前邊或后邊接有空白字符的換行符換成其他的文字,然后把換行符替換掉,之后再把其他文字換成換行符
       //原理是pdf轉成String中間有過多的回車換行符\r\n這種,但是如果換行符前后都是有文字的(不為空),則這應該是一個被pdf強行換行出來的
text = text.replaceAll("\\r\\n\\s","Jacck"); //這里的Jacck最好換成一個更復雜的文本,作為中間替換物存在盡量在中間轉化過程中和文檔中沒有任何匹配
text = text.replaceAll("\\s\\r\\n","Jacck");
text = text.replaceAll("\\n|\\r",""); //處理掉被強行加上來的回車換行符
text = text.replaceAll("Jacck","\r\n");

return text;
// stripper.writeText(document, output);
}catch(Exception e){
e.printStackTrace();
}finally{
if(document != null){
document.close();
}
}
return "";
}

 

 

之后再python中使用pdfminer也實現了同樣的消除pdf大量換行問題,替換核心代碼如下,不同的是python三方包在處理pdf后換行不是\r\n而是\n

re是python中的正則表達式,transfered_str是pdf處理后的字符串,與上邊java中用的思想一樣。

transfered_str = re.sub(r'\n\s', 'Jacck', transfered_str)
transfered_str = re.sub(r'\s\n', 'Jacck', transfered_str)
transfered_str = re.sub(r'\n|\r', '', transfered_str)
transfered_str = re.sub(r'\s{4,}', '\n', transfered_str)
transfered_str = re.sub(r'Jacck','\n',transfered_str

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM