java操作word pdf的四种武器介绍
1。用jacob.其实jacob是一个bridage,连接java和com或者win32函数的一个中间件,jacob并不能直接抽取word,excel等文件,需要自己写dll哦,不过已经有为你写好的了,就是jacob的作者一并提供了。
jacob下载:http://www.matrix.org.cn/down_view.asp?id=13
下载了jacob并放到指定的路径之后(dll放到path,jar文件放到classpath),就可以写你自己的抽取程序了,下面是一个例子:
importjava.io.File;
importcom.jacob.com.*;
importcom.jacob.activeX.*;
publicclassFileExtracter{
publicstaticvoidmain(String[]args){
ActiveXComponentapp=newActiveXComponent("Word.Application");
StringinFile="c://test.doc";
StringtpFile="c://temp.htm";
StringotFile="c://temp.xml";
booleanflag=false;
try{
app.setProperty("Visible",newVariant(false));
Objectdocs=app.getProperty("document.").toDispatch();
Objectdoc=Dispatch.invoke(docs,"Open",Dispatch.Method,newObject[]{inFile,newVariant(false),newVariant(true)},newint[1]).toDispatch();
Dispatch.invoke(doc,"SaveAs",Dispatch.Method,newObject[]{tpFile,newVariant(8)},newint[1]);
Variantf=newVariant(false);
Dispatch.call(doc,"Close",f);
flag=true;
}catch(Exceptione){
e.printStackTrace();
}finally{
app.invoke("Quit",newVariant[]{});
}
}
}
2。用apache的poi来抽取word,excel。
poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这里提供了更加简单的一个接口给你:
下载经过封装后的poi包:http://www.matrix.org.cn/down_view.asp?id=14
下载之后,放到你的classpath就可以了,下面是如何使用它的一个例子:
importjava.io.*;
importorg.textmining.text.extraction.WordExtractor;
/**
*<p>Title:pdfextraction</p>
*<p>Description:email:chris@matrix.org.cn</p>
*<p>Copyright:MatrixCopyright(c)2003</p>
*<p>Company:Matrix.org.cn</p>
*@authorchris
*@version1.0,whousethisexampleplsremainthedeclare
*/
publicclassPdfExtractor{
publicPdfExtractor(){
}
publicstaticvoidmain(Stringargs[])throwsException
{
FileInputStreamin=newFileInputStream("c://a.doc");
WordExtractorextractor=newWordExtractor();
Stringstr=extractor.extractText(in);
System.out.println("theresultlengthis"+str.length());
System.out.println("theresultis"+str);
}
}
3。pdfbox-用来抽取pdf文件
但是pdfbox对中文支持还不好,先下载pdfbox:http://www.matrix.org.cn/down_view.asp?id=12
下面是一个如何使用pdfbox抽取pdf文件的例子:
importorg.pdfbox.pdmodel.PDdocument.
importorg.pdfbox.pdfparser.PDFParser;
importjava.io.*;
importorg.pdfbox.util.PDFTextStripper;
importjava.util.Date;
/**
*<p>Title:pdfextraction</p>
*<p>Description:email:chris@matrix.org.cn</p>
*<p>Copyright:MatrixCopyright(c)2003</p>
*<p>Company:Matrix.org.cn</p>
*@authorchris
*@version1.0,whousethisexampleplsremainthedeclare
*/
publicclassPdfExtracter{
publicPdfExtracter(){
}
publicStringGetTextFromPdf(Stringfilename)throwsException
{
Stringtemp=null;
PDdocument.nbsppdfdocument.null;
FileInputStreamis=newFileInputStream(filename);
PDFParserparser=newPDFParser(is);
parser.parse();
pdfdocument.nbsp=parser.getPDdocument.);
ByteArrayOutputStreamout=newByteArrayOutputStream();
OutputStreamWriterwriter=newOutputStreamWriter(out);
PDFTextStripperstripper=newPDFTextStripper();
stripper.writeText(pdfdocument.getdocument.),writer);
writer.close();
byte[]contents=out.toByteArray();
Stringts=newString(contents);
System.out.println("thestringlengthis"+contents.length+"");
returnts;
}
publicstaticvoidmain(Stringargs[])
{
PdfExtracterpf=newPdfExtracter();
PDdocument.nbsppdfdocument.nbsp=null;
try{
Stringts=pf.GetTextFromPdf("c://a.pdf");
System.out.println(ts);
}
catch(Exceptione)
{
e.printStackTrace();
}
}
}
4.抽取支持中文的pdf文件-xpdf
xpdf是一个开源项目,我们可以调用他的本地方法来实现抽取中文pdf文件。
下载xpdf函数包:http://www.matrix.org.cn/down_view.asp?id=15
同时需要下载支持中文的补丁包:http://www.matrix.org.cn/down_view.asp?id=16
按照readme放好中文的patch,就可以开始写调用本地方法的java程序了
下面是一个如何调用的例子:
importjava.io.*;
/**
*<p>Title:pdfextraction</p>
*<p>Description:email:chris@matrix.org.cn</p>
*<p>Copyright:MatrixCopyright(c)2003</p>
*<p>Company:Matrix.org.cn</p>
*@authorchris
*@version1.0,whousethisexampleplsremainthedeclare
*/
publicclassPdfWin{
publicPdfWin(){
}
publicstaticvoidmain(Stringargs[])throwsException
{
StringPATH_TO_XPDF="C://ProgramFiles//xpdf//pdftotext.exe";
Stringfilename="c://a.pdf";
String[]cmd=newString[]{PATH_TO_XPDF,"-enc","UTF-8","-q",filename,"-"};
Processp=Runtime.getRuntime().exec(cmd);
BufferedInputStreambis=newBufferedInputStream(p.getInputStream());
InputStreamReaderreader=newInputStreamReader(bis,"UTF-8");
StringWriterout=newStringWriter();
char[]buf=newchar[10000];
intlen;
while((len=reader.read(buf))>=0){
//out.write(buf,0,len);
System.out.println("thelengthis"+len);
}
reader.close();
Stringts=newString(buf);
System.out.println("thestris"+ts);
}
}
本文地址:http://www.45fan.com/dnjc/70025.html