1. gzyueqian
      18529173453
      首頁 > 新聞中心 > > 正文

      java抽取word,pdf的四種武器

      更新時間: 2007-05-30 09:38:00來源: 粵嵌教育瀏覽量:682


        很多人用java進行文檔操作時經常會遇到一個問題,就是如何獲得word,excel,pdf等文檔的內容?我研究了一下,在這里總結一下抽取word,pdf的幾種方法。

        1 .用jacob

        其實jacob是一個bridage,連接java和com或者win32函數的一個中間件,jacob并不能直接抽取word,excel等文件,需要自己寫dll哦,不過已經有為你寫好的了,就是jacob的作者一并提供了。

      jacob jar與dll文件下載: http://www.matrix.org.cn/down_view.asp?id=13

        下載了jacob并放到指定的路徑之后(dll放到path,jar文件放到classpath),就可以寫你自己的抽取程序了,下面是一個簡單的例子:

      import java.io.File;
      import com.jacob.com.*;
      import com.jacob.activeX.*;
      /**
      * Title: pdf extraction
      * Description: email:chris@matrix.org.cn
      * Copyright: Matrix Copyright 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}, 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://www.matrix.org.cn/down_view.asp?id=14

      下載之后,放到你的classpath就可以了,下面是如何使用它的一個例子:

      import java.io.*;
      import org.textmining.text.extraction.WordExtractor;
      /**
      *
      Title: word extraction


      *
      Description: email:chris@matrix.org.cn


      *
      Copyright: Matrix Copyright 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.matrix.org.cn/down_view.asp?id=12

      下面是一個如何使用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:chris@matrix.org.cn


      *
      Copyright: Matrix Copyright 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.matrix.org.cn/down_view.asp?id=15

      同時需要下載支持中文的補丁包: http://www.matrix.org.cn/down_view.asp?id=16

      按照readme放好中文的patch,就可以開始寫調用本地方法的java程序了

      下面是一個如何調用的例子:

      import java.io.*;
      /**
      *
      Title: pdf extraction


      *
      Description: email:chris@matrix.org.cn


      *
      Copyright: Matrix Copyright 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);
      }
      }

        關于作者
        作者簡介:chris,畢業于中國人民大學信息學院。現于香港進行金融分析軟件研發,作者亦活躍于 jxta p2p開源軟件的開發社區,并熱衷于網絡安全,AI搜索引擎技術與基于java的游戲引擎技術。
        如果大家誰有更好的辦法,請告訴作者 : chris@matrix.org.cn

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 三级中文版AV片 | 亚洲国产福利精品 | 婷婷中文字幕精品 | 欧美亚洲国产日韩一二三区 | 伊人久久大香线焦综合5g | 亚洲国产一区二区在线观看 |