java開發詳解pdf
1. java解析pdf文字順序不對
修復你的PDF軟體或者調整頁面順序。
java解析pdf獲取pdf中內容信皮運前息:
第一種 使用開源組織提供的開源框架 pdfboxapi ; https://pdfbox.apache.org/
特點:免費,功能強大,解析中文或許會存在亂碼,默認格式有點亂,沒有國產解析的那麼美化。
想要按行讀取:可以按照指定的模板,對pdf進行修改添加刪除等操作,總之操作很騷,很強大。
1.pdfbox 需要帶入依賴。
2.代碼。
第二種使用國產的框架 Spire.PDF包含兩種版本。
1 免費版。
https://www.e-iceblue.cn/Downloads/Free-Spire-PDF-JAVA.html
友情提示: 免費版有 10 頁的頁數輸出限制,在輸出結果文檔時只能輸出前10頁。將 PDF 文檔轉換為圖片、Word、HTML、XPS等格式時,僅支持轉換前 10 頁。如超出限制,可升級到商業版,我們僅對免費版進行不定期維護。
2 商業版本。
https://www.e-iceblue.cn/Introce/Spire-PDF-JAVA.html。
api。
http://e-iceblue.cn/licensing/install-spirepdf-for-java-from-maven-repository.html。
特點:商業版本收費,免費版本有限制,可供開發人員調試,解析格式友好,解析結果是按照行顯示,對悄拿pdf 圖形 ,水印 ,文本, 條形碼等添加增刪改操作,總之個人感覺比pdfbox順手,但就是收費啊,誰讓咱公司沒錢呢。
主要功能:
只需 Free Spire.PDF for Java,無需 Adobe Acrobat。
Free Spire.PDF for Java 是一款完全獨立的 PDF 類庫。它的運行環境無需安裝 Adobe Acrobat 或其他任何第三方組件。
多樣化的PDF文檔操作功能。
Free Spire.PDF for Java 支持畫文本、圖片、表格、條形碼、形狀到 PDF,提取文本和圖片,創建、填充和刪除 PDF 表單,添加文本/圖片水印到 PDF,添加、更新和刪除 PDF 書簽,操作超鏈接、附件和注釋,以及添加圖片/文本印章到 PDF 等。
文檔信息設置。
Free Spire.PDF for Java 支持設置 PDF 文檔信息,例如文檔屬性設置,偏好燃清設置(頁面方向,頁面大小,縮放比例等)。
高質量的文檔轉換功能。
Free Spire.PDF for Java 支持將 PDF 文檔高質量地轉換為 Word、HTML、XPS、圖片、SVG 和 PDF/A 格式,以及將 XPS 文檔高質量地轉換為 PDF 格式。
文檔安全性設置。
Free Spire.PDF for Java 支持給 PDF 文檔添加和驗證數字簽名,加密和解密 PDF 文檔,修改 PDF 文檔的安全許可權,以及檢測簽名後的 PDF 文檔是否被修改。
易於集成。
開發人員可以輕易地將 Free Spire.PDF for Java 集成到 Java(J2SE和J2EE)應用程序中。
2. java解析pdf文件,求大神提供代碼,請注意是java語言的
給你提供一個參考例子,你可以在這個例子上試試,修改修改。也是解析PDF的。
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.OutputStreamWriter;
importjava.io.Writer;
importjava.net.MalformedURLException;
importjava.net.URL;
importorg.apache.pdfbox.pdmodel.PDDocument;
importorg.apache.pdfbox.util.PDFTextStripper;
publicclassPdfReader{
publicvoidreadFdf(Stringfile)throwsException{
//是否排序
booleansort=false;
//pdf文件名
StringpdfFile=file;
//輸入文本文件名稱
StringtextFile=null;
//編碼方式
Stringencoding="UTF-8";
//開始提取頁數
intstartPage=1;
//結束提取頁數
intendPage=Integer.MAX_VALUE;
//文件輸入流,生成文本文件
Writeroutput=null;
//內存中存儲的PDFDocument
PDDocumentdocument=null;
try{
try{
//首先當作一個URL來裝載文件,如果得到異常再從本地文件系統//去裝載文件
URLurl=newURL(pdfFile);
//注意參數已不是以前版本中的URL.而是File。
document=PDDocument.load(pdfFile);
//獲取PDF的文件名
StringfileName=url.getFile();
//以原來PDF的名稱來命名新產生的txt文件
if(fileName.length()>4){
FileoutputFile=newFile(fileName.substring(0,fileName
.length()-4)
+".txt");
textFile=outputFile.getName();
}
}catch(MalformedURLExceptione){
//如果作為URL裝載得到異常則從文件系統裝載
//注意參數已不是以前版本中的URL.而是File。
document=PDDocument.load(pdfFile);
if(pdfFile.length()>4){
textFile=pdfFile.substring(0,pdfFile.length()-4)
+".txt";
}
}
//文件輸入流,寫入文件倒textFile
output=newOutputStreamWriter(newFileOutputStream(textFile),
encoding);
//PDFTextStripper來提取文本
PDFTextStripperstripper=null;
stripper=newPDFTextStripper();
//設置是否排序
stripper.setSortByPosition(sort);
//設置起始頁
stripper.setStartPage(startPage);
//設置結束頁
stripper.setEndPage(endPage);
//調用PDFTextStripper的writeText提取並輸出文本
stripper.writeText(document,output);
}finally{
if(output!=null){
//關閉輸出流
output.close();
}
if(document!=null){
//關閉PDFDocument
document.close();
}
}
}
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
PdfReaderpdfReader=newPdfReader();
try{
//取得E盤下的SpringGuide.pdf的內容
pdfReader.readFdf("d:\b.pdf");
}catch(Exceptione){
e.printStackTrace();
}
}
}
3. java 如何訪問pdf文件
在Java中,訪問PDF文件並提取其文本內容需要使用PDFBox庫。首先,你需要導入必要的類,如FileInputStream,PDDocument,PDFParser和PDFTextStripper。以下是一個簡單的示例代碼:
假設你的PDF文件路徑為"F:/pdf/網易技術部的MySQL中文資料.pdf"。創建一個名為PDFReader的類,該類包含一個名為GetTextFromPdf的方法,該方法接收一個文件名作為參數,並返回PDF文件中的純文本內容。在方法內部,首先創建一個FileInputStream對象,然後使用PDFParser解析該文件。接著,通過PDDocument對象獲取PDF文檔的內容,最後使用PDFTextStripper提取文本。示例代碼如下:
java
import java.io.*;
import org.pdfbox.pdmodel.PDDocument;
import org.pdfbox.pdfparser.PDFParser;
import org.pdfbox.util.PDFTextStripper;
public class PDFReader {
public static String file_path = "F:/pdf/網易技術部的MySQL中文資料.pdf";
// 獲取PDF內純文本信息
public String GetTextFromPdf(String filename) throws Exception {
FileInputStream instream = new FileInputStream(filename);
// 根據指定文件創建輸入流
PDFParser parser = new PDFParser(instream);
// 創建PDF解析器
parser.parse();
// 執行PDF解析過程
PDDocument pdfdocument = parser.getPDDocument();
// 獲取解析器的PDF文檔對象
PDFTextStripper pdfstripper = new PDFTextStripper();
// 生成PDF文檔內容剝離器
String contenttxt = pdfstripper.getText(pdfdocument);
// 利用剝離器獲取文檔
System.out.println("文件長度 : " + contenttxt.length() + "\n");
return contenttxt;
}
public static void main(String args[]) {
PDFReader pdfbox = new PDFReader();
// 生成PDFBoxHello對象
try {
// 獲取文檔純文本內容
String doctext = pdfbox.GetTextFromPdf(file_path);
System.out.println("文件內容 : ");
System.out.println(doctext);
System.out.println("文件結束 . ");
} catch (Exception e) {
e.printStackTrace();
}
}
}
這段代碼首先通過FileInputStream打開PDF文件,然後利用PDFParser解析該文件,之後通過PDDocument獲取PDF文檔對象,並使用PDFTextStripper提取文本內容。需要注意的是,為了使用這些類,你需要在項目中引入PDFBox庫。
這個例子展示了如何使用Java讀取PDF文件中的文本。通過這種方式,你可以將PDF文檔轉換為純文本,方便進一步處理或分析。當然,你也可以根據需要對代碼進行調整,以滿足特定的需求。
4. java 解析pdf表格
最近在幫公司做工具,需要讀取PDF中表格的數據。網上查了,大部分PDFBox讀取的代碼都大致相同,一行一行從頭讀到尾。嘗試讀取PDF表格的人可能會遇到表格有空數據時,列與列就會對不齊,這樣就不能很好地進行數據的處理了。網上看到一個例子,用iText坐標精確讀取的例子,參考以後出現了亞洲語種字體不支持,添加了語言包iTextAsian.jar導入字體後,結果發現列印的都是空格無法處理。後找到了PDFBox坐標讀取的方法,相當給力。在此過程中了解到有很多人遇到了我這樣的問題。所以寫下來望對現在還未解決問題還有以後遇到此問題的人提供幫助。
上代碼:
package com.pdfbox.util.test;
import org.apache.pdfbox.exceptions.InvalidPasswordException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.util.PDFTextStripperByArea;
import java.awt.Rectangle;
import java.util.List;
public class ExtractTextByArea
{