java解析pdf檔案並輸出指定的內容
阿新 • • 發佈:2020-12-17
要求
通過解析pdf檔案,輸出發票程式碼,發票號碼,開票日期(YYYYMMDD),校驗碼後六位。
Demo下載地址(包含jar包和測試pdf檔案)
實現
import java.io.File;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
public class PDFInvoiceExtractor {
/**
* @param path pdf檔案的路徑
* @return pdf中的文字資訊,但是由於pdf本身格式的問題,導致文字的順序可能會錯亂。
*/
public String parsePDF(String path){
String result = "";
try{
PDDocument document = PDDocument.load(new File(path));
PDFTextStripper stripper = new PDFTextStripper();
stripper.setSortByPosition(true);
for (int p = 1; p <= document. getNumberOfPages(); ++p)
{
stripper.setStartPage(p);
stripper.setEndPage(p);
String text = stripper.getText(document);
result += text;
}
}catch(Exception e){
e.printStackTrace();
}
return result;
}
public static void main(String[] args) {
PDFInvoiceExtractor pie = new PDFInvoiceExtractor();
//System.out.println(pie.parsePDF("031001800211-84462201 - 圖書.pdf"));
//TODO 這裡開始你們的表演:
//對給出的4個pdf檔案進行解析。
//使用String解析上述的文字資訊(即下面的變數s),只輸出發票程式碼,發票號碼,開票日期(YYYYMMDD公示),校驗碼後六位。
String s = pie.parsePDF("76439508 - 技術服務費 阿里雲.pdf");
System.out.println(s);
//發票程式碼
System.out.println("發票程式碼:"+s.substring(s.indexOf("發票程式碼")+5).split("[^0-9]")[0]);
//發票號碼
System.out.println("發票號碼:"+s.substring(s.indexOf("發票號碼")+5).split("[^0-9]")[0]);
//開票日期
System.out.println("開票日期:"+s.substring(s.indexOf("開票日期")+5).split("日")[0].replaceAll("[^0-9]",""));
//校驗碼
s=s.replaceAll(" ","");
String jiao= s.substring(s.indexOf("校驗碼")+4).split("[^0-9]")[0];
System.out.println("校驗碼:"+jiao.substring(jiao.length()-6));
}
}
寫作不易,既然來了,不妨點個關注,點個贊吧!!!