chris ()
毕业于中国人民大学信息学院
年 月
很多人用java进行文档操作时经常会遇到一个问题就是如何获得wordexcelpdf等文档的内容?我研究了一下在这里总结一下抽取wordpdf的几种方法
用jacob
其实jacob是一个bridage连接java和com或者win函数的一个中间件jacob并不能直接抽取wordexcel等文件需要自己写dll哦不过已经有为你写好的了就是jacob的作者一并提供了
jacob jar与dll文件下载 ?id=
下载了jacob并放到指定的路径之后(dll放到pathjar文件放到classpath)就可以写你自己的抽取程序了下面是一个简单的例子
import javaioFile;
import *;
import comjacobactiveX*;
/**
* Title: pdf extraction
* Description: email:
* Copyright: Matrix Copyright (c)
* Company:
* @author chris
* @version who use this example pls remain the declare
*/
public class FileExtracter{
public static void main(String[] args) {
ActiveXComponent component = new ActiveXComponent(WordApplication);
String inFile = c:\\testdoc;
String tpFile = c:\\;
String otFile = c:\\tempxml;
boolean flag = false;
try {
componentsetProperty(Visible new Variant(false));
Object wordacc = componentgetProperty(document.)toDispatch();
Object wordfile = Dispatchinvoke(wordaccOpen DispatchMethod
new Object[]{inFilenew Variant(false) new Variant(true)}
new int[] )toDispatch();
Dispatchinvoke(wordfileSaveAs DispatchMethod new Object[]{tpFilenew Variant()} new int[]);
Variant f = new Variant(false);
Dispatchcall(wordfile Close f);
flag = true;
} catch (Exception e) {
eprintStackTrace();
} finally {
componentinvoke(Quit new Variant[] {});
}
}
}
用apache的poi来抽取wordexcel
poi是apache的一个项目不过就算用poi你可能都觉得很烦不过不要紧这里提供了更加简单的一个接口给你
下载经过封装后的poi包 ?id=
下载之后放到你的classpath就可以了下面是如何使用它的一个例子
import javaio*;
import orgtextminingtextextractionWordExtractor;
/**
*
Title: word extraction
*
Description: email:
*
Copyright: Matrix Copyright (c)
*
Company:
* @author chris
* @version 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:\\adoc);
WordExtractor extractor = new WordExtractor();
String str = extractorextractText(in);
Systemoutprintln(the result length is+strlength());
Systemoutprintln(the result is+str);
}
}
pdfbox用来抽取pdf文件
但是pdfbox对中文支持还不好先下载pdfbox ?id=
下面是一个如何使用pdfbox抽取pdf文件的例子
import orgpdfboxpdmodelPDdocument.
import orgpdfboxpdfparserPDFParser;
import javaio*;
import orgpdfboxutilPDFTextStripper;
import javautilDate;
/**
*
Title: pdf extraction
*
Description: email:
*
Copyright: Matrix Copyright (c)
*
Company:
* @author chris
* @version 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 );
parserparse();
pdfdocument.nbsp= parsergetPDdocument.);
ByteArrayOutputStream out = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter( out );
PDFTextStripper stripper = new PDFTextStripper();
stripperwriteText(pdfdocument.getdocument.) writer );
writerclose();
byte[] contents = outtoByteArray();
String ts=new String(contents);
Systemoutprintln(the string length is+contentslength+\n);
return ts;
}
public static void main(String args[])
{
PdfExtracter pf=new PdfExtracter();
PDdocument.nbsppdfdocument.nbsp= null;
try{
String ts=pfGetTextFromPdf(c:\\apdf);
Systemoutprintln(ts);
}
catch(Exception e)
{
eprintStackTrace();
}
}
}
抽取支持中文的pdf文件-xpdf
xpdf是一个开源项目我们可以调用他的本地方法来实现抽取中文pdf文件
下载xpdf函数包 ?id=
同时需要下载支持中文的补丁包 ?id=
按照readme放好中文的patch就可以开始写调用本地方法的java程序了
下面是一个如何调用的例子
import javaio*;
/**
*
Title: pdf extraction
*
Description: email:
*
Copyright: Matrix Copyright (c)
*
Company:
* @author chris
* @version 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\\pdftotextexe;
String filename=c:\\apdf;
String[] cmd = new String[] { PATH_TO_XPDF enc UTF q filename };
Process p = RuntimegetRuntime()exec(cmd);
BufferedInputStream bis = new BufferedInputStream(pgetInputStream());
InputStreamReader reader = new InputStreamReader(bis UTF);
StringWriter out = new StringWriter();
char [] buf = new char[];
int len;
while((len = readerread(buf))>= ) {
//outwrite(buf len);
Systemoutprintln(the length is+len);
}
readerclose();
String ts=new String(buf);
Systemoutprintln(the str is+ts);
}
}
关于作者
作者简介chris毕业于中国人民大学信息学院现于香港进行金融分析软件研发作者亦活跃于 jxta pp开源软件的开发社区并热衷于网络安全AI搜索引擎技术与基于java的游戏引擎技术
如果大家谁有更好的办法请告诉作者 :