zoukankan      html  css  js  c++  java
  • java抽取word,pdf的四种武器

    有关《java抽取word,pdf的四种武器》的实验和总结未分类这几天要做一个抽取word或pdf中的文本信息的工作,看了一些资料,也做了一点实验,总结一下。
    我的实验主要基于《java抽取word,pdf的四种武器》这篇文章,可以去http://www.ibm.com/developerworks/cn/java/l-java-tips/index.html 上看。这是人大的chris师兄03年做的总结,是网上有关java抽取word,pdf转载最多的文章。
    一、word转txt 方法一:用jacob 这个我没有动手去试,有人试过的话也可以告诉我。 方法二:用apache的poi来抽取word,excel 出于对apache莫名其妙的好感,我开始便选择了这个方法。这个方法很简单,只要下载下载经过封装后的poi包,我下的是tm-extractors-0.4.jar,放在该放的位置就好了。 调用的代码也很简单,参考推荐文章。
    二、pdf转txt 这个我实现就没上面那么顺利了。chris的文章中提到的两种方法,分别是基于xpdf和pdfbox。作者说pdfbox不支持中文,我便径直选择了xpdf。
    应用xpdf抽取pdf文件,核心语句是          String[] cmd = new String[] { PATH_TO_XPDF, "-enc", "UTF-8", "-q", filename, "-"};      Process p = Runtime.getRuntime().exec(cmd); 它调用了pdftotext.exe文件并传给它一定的参数,来实现ptf到txt的转化。 应用这种方法,将在要转换的pdf路径下得到同名的一个txt文件,chris师兄用下面的代码 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); 想要在转化文件格式的同时将读到的文本信息放在字符串里,在我的程序中跑起来得到的结果是一连串0,不知道是我的问题还是这种方法是不可行的。
    应用这种方法需要注意的是要将chinese-simplified文件夹、pdftotext.exe程序和xpdfrc文件放在同一级目录内,否则不会转换成功。
    这种方法比较恶心的一点是,xpdf的本地方法,也就是pdftotext.exe是C写的编译过的可执行程序,这就意味着我们不能得到源码,而且只要是执行了pdftotext.exe而不管是不是执行正确,都不会报错。
    chris师兄有个需要完善的地方,就是Runtime.getRuntime().exec(cmd);语句后最好加一句process.waitFor();,以保证转换程序完成之后再进行其它操作。
    这种方法我遇到了一个问题,就是在应用程序下这种方法可以实现,通过web调用在服务器端执行这个程序却始终没能得到想要的txt文件。排除了各种可能之后,我觉得问题出在传给pdftotext.exe的文件路径不对,它没能找到这个文件。我试着将文件的绝对路径、相对路径等一切我能想到的路径传给exe,始终没有转换成功,最终放弃。这个部分还希望能有高人指点。
    pdfbox抽取pdf文件
    pdfbox是一个为开发人员读取和创建pdf文档而准备的纯java类库。在上面的方法遇到挫折的时候,我转向了这个方法,然后惊喜的发现,pdfbox的最新版本PDFBox-0.7.3已经解决了不支持中文的问题。 chris师兄文章写的时候估计还只有PDFBox-0.7.1版,我试过了,的确不能支持中文。 对于这种方法,我想讲的是如果想在我们自己的project中使用该方法,需要下载PDFBox-0.7.3.zip,解压缩,将external下的所有jar包,以及lib下的PDFBox-0.7.3.jar统统添加到我们的project中。 我想是因为pdfbox版本的不同,chris师兄的程序需要一点修改才能运行,我觉得有用的主要有以下几条语句:
                         PDDocument document = PDDocument.load(pdfFile);   //在内存中存储的PDF Document,pdfFile为pdf文件名
                     // 将转化后的文本信息写入txt文件
                     Writer output = new OutputStreamWriter(new FileOutputStream(textFile), "UTF-8"); //textFile为新生成的txt文件名                PDFTextStripper stripper = new PDFTextStripper(); // PDFTextStripper来提取文本                                   stripper.writeText(document, output); //         调用PDFTextStripper的writeText提取并输出文本                  //将pdf的文本信息读到String中                       String text = stripper.getText(document);                 用我的方法由pdfbox生成的txt文件是没有格式信息的,而且中文的字与字之间都加了空格,我想是因为我并没有很深入的研pdfbox导致的。 而xpdf生成的文本则是包含格式信息的,这对于处理格式固定的pdf文件来说无疑是有很大帮助的。

  • 相关阅读:
    windows的80端口被占用时的处理方法
    Ansible自动化运维工具安装与使用实例
    Tomcat的测试网页换成自己项目首页
    LeetCode 219. Contains Duplicate II
    LeetCode Contest 177
    LeetCode 217. Contains Duplicate
    LeetCode 216. Combination Sum III(DFS)
    LeetCode 215. Kth Largest Element in an Array(排序)
    Contest 176 LeetCode 1354. Construct Target Array With Multiple Sums(优先队列,递推)
    Contest 176
  • 原文地址:https://www.cnblogs.com/itbole/p/3094133.html
Copyright © 2011-2022 走看看