跳转到主要内容

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

所有提交的信息确保安全。

  • 关闭 [x]

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

所有提交的信息确保安全。

  • 关闭 [x]

java 抽取 word,pdf 的四种武器

chris (chris@matrix.org.cn), 毕业于中国人民大学信息学院
作者简介:chris,毕业于中国人民大学信息学院。现于香港进行金融分析软件研发,作者亦活跃于 jxta p2p开源软件的开发社区,并热衷于网络安全,AI搜索引擎技术与基于java的游戏引擎技术。
如果大家谁有更好的办法,请告诉作者 : chris@matrix.org.cn

简介: 很多人用 java 进行文档操作时经常会遇到一个问题,就是如何获得 word,excel,pdf 等文档的内容?我研究了一下,在这里总结一下抽取 word,pdf 的几种方法。

发布日期: 2003 年 6 月 27 日
级别: 初级
访问情况 : 2558 次浏览
评论: 


用 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 (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[] {});
  } 
 } 
}


用 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; 
 /** 
 * <p>Title: word extraction</p> 
 * <p>Description: email:chris@matrix.org.cn</p> 
 * <p>Copyright: Matrix Copyright (c) 2003</p> 
 * <p>Company: Matrix.org.cn</p> 
 * @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); 
 } 
 } 


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; 
 /** 
 * <p>Title: pdf extraction</p> 
 * <p>Description: email:chris@matrix.org.cn</p> 
 * <p>Copyright: Matrix Copyright (c) 2003</p> 
 * <p>Company: Matrix.org.cn</p> 
 * @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(); 
  } 
 } 
 } 


抽取支持中文的 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.*; 
 /** 
 * <p>Title: pdf extraction</p> 
 * <p>Description: email:chris@matrix.org.cn</p> 
 * <p>Copyright: Matrix Copyright (c) 2003</p> 
 * <p>Company: Matrix.org.cn</p> 
 * @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

关于报告滥用的帮助

报告滥用

谢谢! 此内容已经标识给管理员注意。


关于报告滥用的帮助

报告滥用

报告滥用提交失败。 请稍后重试。


developerWorks:登录


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 使用条款

 


当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在 developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。

请选择您的昵称:

当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

(长度在 3 至 31 个字符之间)


单击提交则表示您同意developerWorks 的条款和条件。 使用条款.

 


为本文评分

评论

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology
ArticleID=52916
ArticleTitle=java 抽取 word,pdf 的四种武器
publish-date=06272003
author1-email=chris@matrix.org.cn
author1-email-cc=chris@matrix.org.cn

标签

Help
使用 搜索 文本框在 My developerWorks 中查找包含该标签的所有内容。

使用 滑动条 调节标签的数量。

热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。

我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。

使用搜索文本框在 My developerWorks 中查找包含该标签的所有内容。热门标签 显示了特定专区最受欢迎的标签(例如 Java technology,Linux,WebSphere)。我的标签 显示了特定专区您标记的标签(例如 Java technology,Linux,WebSphere)。