程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java抽取Word,PDF格式文件的四種武器

Java抽取Word,PDF格式文件的四種武器

編輯:關於JAVA

很多人用Java進行文檔操作時經常會遇到一個問題,就是如何獲得word,Excel,pdf等文檔的內容?我研究了一下,在這裡總結一下抽取Word,pdf的幾種方法。 
1. 用jacob 
其實jacob是一個bridage,連接Java和com或者win32函數的一個中間件,jacob並不能直接抽取Word,Excel等文件,需要自己寫dll哦,不過已經有為你寫好的了,就是jacob的作者一並提供了。 
jacob jar與dll文件下載: http://danadler.com/jacob/ 
下載了jacob並放到指定的路徑之後(dll放到path,jar文件放到classpath),就可以寫你自己的抽取程序了,下面是一個簡單的例子: 
import Java.io.File; 
import com.jacob.com.*; 
import com.jacob.activeX.*; 
/** 
* Title: pdf extraction 
* Description: email:[email protected] 
* Copyright: Matrix Copyright (c) 2003 
* Company: Matrix.org.cn 
* @author chris 
* @version 1.0,who use this example pls remain the declare 
*/ 
public class FileExtracter{ 
public static void main(String[] args) { 
ActiveXComponent component = new ActiveXComponent("Word.Application"); 
String inFile = "c:\test.doc"; 
String tpFile = "c:\temp.htm"; 
String otFile = "c:\temp.XML"; 
boolean flag = false; 
try { 
component.setProperty("Visible", new Variant(false)); 
Object Wordacc = component.getProperty("document.").toDispatch(); 
Object wordfile = Dispatch.invoke(Wordacc,"Open", Dispatch.Method, 
new Object[]{inFile,new Variant(false), new Variant(true)}, 
new int[1] ).toDispatch(); 
Dispatch.invoke(Wordfile,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(8)}, new int[1]); 
Variant f = new Variant(false); 
Dispatch.call(Wordfile, "Close", f); 
flag = true; 
} catch (Exception e) { 
e.printStackTrace(); 
} finally { 
component.invoke("Quit", new Variant[] {}); 



2. 用apache的poi來抽取Word,Excel。 
poi是apache的一個項目,不過就算用poi你可能都覺得很煩,不過不要緊,這裡提供了更加簡單的一個接口給你: 
下載經過封裝後的poi包: http://jakarta.apache.org/poi/ 
下載之後,放到你的classpath就可以了,下面是如何使用它的一個例子: 
import Java.io.*; 
import org.textmining.text.extraction.WordExtractor; 
/** 
*

Title: Word extraction


*

Description: email:[email protected]


*

Copyright: Matrix Copyright (c) 2003


*

Company: Matrix.org.cn


* @author chris 
* @version 1.0,who use this example pls remain the declare 
*/ 

public class PdfExtractor { 
public PdfExtractor() { 

public static void main(String args[]) throws Exception 

FileInputStream in = new FileInputStream ("c:\a.doc"); 
WordExtractor extractor = new WordExtractor(); 
String str = extractor.extractText(in); 
System.out.println("the result length is"+str.length()); 
System.out.println("the result is"+str); 


3. pdfbox-用來抽取pdf文件 
但是pdfbox對中文支持還不好,先下載pdfbox: http://www.pdfbox.org/ 
下面是一個如何使用pdfbox抽取pdf文件的例子: 
import org.pdfbox.pdmodel.PDdocument. 
import org.pdfbox.pdfparser.PDFParser; 
import Java.io.*; 
import org.pdfbox.util.PDFTextStripper; 
import Java.util.Date; 
/** 
*

Title: pdf extraction


*

Description: email:[email protected]


*

Copyright: Matrix Copyright (c) 2003


*

Company: Matrix.org.cn


* @author chris 
* @version 1.0,who use this example pls remain the declare 
*/ 

public class PdfExtracter{ 

public PdfExtracter(){ 

public String GetTextFromPdf(String filename) throws Exception 

String temp=null; 
PDdocument.nbsppdfdocument.null; 
FileInputStream is=new FileInputStream(filename); 
PDFParser parser = new PDFParser( is ); 
parser.parse(); 
pdfdocument.nbsp= parser.getPDdocument.); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
OutputStreamWriter writer = new OutputStreamWriter( out ); 
PDFTextStripper stripper = new PDFTextStripper(); 
stripper.writeText(pdfdocument.getdocument.), writer ); 
writer.close(); 
byte[] contents = out.toByteArray(); 

String ts=new String(contents); 
System.out.println("the string length is"+contents.length+"n"); 
return ts; 

public static void main(String args[]) 

PdfExtracter pf=new PdfExtracter(); 
PDdocument.nbsppdfdocument.nbsp= null; 

try{ 
String ts=pf.GetTextFromPdf("c:\a.pdf"); 
System.out.println(ts); 

catch(Exception e) 

e.printStackTrace(); 




4. 抽取支持中文的pdf文件-xpdf 
xpdf是一個開源項目,我們可以調用他的本地方法來實現抽取中文pdf文件。 
下載xpdf函數包: http://www.foolabs.com/xpdf/ 
同時需要下載支持中文的補丁包,按照readme放好中文的patch,就可以開始寫調用本地方法的Java程序了。 
下面是一個如何調用的例子: 
import Java.io.*; 
/** 
*

Title: pdf extraction


*

Description: email:[email protected]


*

Copyright: Matrix Copyright (c) 2003


*

Company: Matrix.org.cn


* @author chris 
* @version 1.0,who use this example pls remain the declare 
*/ 


public class PdfWin { 
public PdfWin() { 

public static void main(String args[]) throws Exception 

String PATH_TO_XPDF="C:\Program Files\xpdf\pdftotext.exe"; 
String filename="c:\a.pdf"; 
String[] cmd = new String[] { PATH_TO_XPDF, "-enc", "UTF-8", "-q", filename, "-"}; 
Process p = Runtime.getRuntime().exec(cmd); 
BufferedInputStream bis = new BufferedInputStream(p.getInputStream()); 
InputStreamReader reader = new InputStreamReader(bis, "UTF-8"); 
StringWriter out = new StringWriter(); 
char [] buf = new char[10000]; 
int len; 
while((len = reader.read(buf))>= 0) { 
//out.write(buf, 0, len); 
System.out.println("the length is"+len); 

reader.close(); 
String ts=new String(buf); 
System.out.println("the str is"+ts); 

}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved