- 浏览: 173549 次
- 性别:
- 来自: 青岛
文章分类
最新评论
-
hugang357:
...
java String to byte[] -
lyzhu:
winstr
使用JAVASCRIPT实现弹出框,过一段时间自动消失 -
laoliu.org:
要是稍微整理一下成一个健全类就更好了,呵呵。
我把它转到IT民 ...
java月份时间(第一天,最后一天) -
kaituozhe6666:
...
使用JAVASCRIPT实现弹出框,过一段时间自动消失 -
damocreazy:
试一试
如何让EditPlus可以编译执行Java程序
引用 :http://www.iteye.com/post/599330
各位好:在javaeye好长时间了,一直在各大网站学习各位的经验很感谢各位,目前我遇到一个关于lucene索引的问题,在国内和国外的网站上找了很久也没找到一个比较满意的解决办法,所以在这里想问问大家,希望有过这方面的经验的朋友给些帮助,最好能有些比较好的代码或可行性建议,我的代码大概如下
main方法主要是输入三个参数 第一个是转换文档的格式,第二个是文档存放的路径,第三个是要输出的文档存放的位置,
然后对输出的文档进行索引, 平均每个文档在1M-5M之间,
问题: 在进行文档转换的时候pdf,word,xls 都非常慢,本来想写一个threadpool来进行文档的转换,可是测试数据表明多线程转换还不如单线程的快,而且也容易出现outofmemory, 后来我又想了一个办法,把大的pdf ,word xls 进行切分,可是写了一个java的切分成小文档的方法,只能对txt文档进行转换,word 和pdf 因为里面有很多格式和样式的东西都是二进制的,在合成一个大的文档就合并不回去了(c++ 或.net 到时有办法切分),所以希望有过索引大量pdf ,word,xls 文档的朋友给写帮助,能快速处理, 目前的数据量大概是1T(大概是100G),服务器配置大概是4个cpu ,4G内存,虚拟机开到了1.2个G用的是jdk1.4在大也开不了了,谢谢帮助
各位好:在javaeye好长时间了,一直在各大网站学习各位的经验很感谢各位,目前我遇到一个关于lucene索引的问题,在国内和国外的网站上找了很久也没找到一个比较满意的解决办法,所以在这里想问问大家,希望有过这方面的经验的朋友给些帮助,最好能有些比较好的代码或可行性建议,我的代码大概如下
import com.messagesolution.message.viewer.util.HtmlDocument; import com.messagesolution.util.logger.Logger; import org.pdfbox.pdfparser.PDFParser; import org.pdfbox.util.PDFTextStripper; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.textmining.text.extraction.WordExtractor; import java.io.*; public class DocumentConverter { public static boolean convertPDF(String fromfile, String tofile) { PDFParser parser = null; String s = null; FileInputStream in = null; FileOutputStream fos = null; //BufferedOutputStream bos = null; DataOutputStream dos = null; try { try { PDFTextStripper _stripper = new PDFTextStripper(); in = new FileInputStream(new File(fromfile)); parser = new PDFParser(in); parser.parse(); s = _stripper.getText(parser.getDocument()); if (StringToolKit.isEmpty(s)){ Logger.getInstance().error("read string of pdf is empty"); return false; //nothing to write } } catch (Exception e) { Logger.getInstance().error("read pdf or convert it error"); e.printStackTrace(); return false; } try { //now write this string to a file fos = new FileOutputStream(new File(tofile)); //bos = new BufferedOutputStream(fos); //bos.write(s.getBytes()); //what about other language? dos = new DataOutputStream(fos); dos.writeBytes(s); } catch (Exception e) { Logger.getInstance().error("write converted txt error"); e.printStackTrace(); return false; } } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertPDF for file: " + fromfile, t); System.err.println("Exception occurred in convertPDF, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } finally { try { if (parser != null) parser.getDocument().close(); if (in != null) in.close(); if (fos != null) fos.close(); //if (bos != null) // bos.close(); if (dos != null) dos.close(); } catch (Exception ex) { Logger.getInstance().error(ex.toString()); } } return true; } public static boolean convertDOC(String fromfile, String tofile) { FileInputStream fis = null; FileOutputStream fos = null; DataOutputStream dos = null; try { fis = new FileInputStream (new File(fromfile)); WordExtractor extractor = new WordExtractor(); String s = extractor.extractText(fis); //now write this string to a file fos = new FileOutputStream(new File(tofile)); //bos = new BufferedOutputStream(fos); //bos.write(s.getBytes()); //what about other language? dos = new DataOutputStream(fos); dos.writeBytes(s); } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertDOC for file: " + fromfile, t); System.err.println("Exception occurred in convertDOC, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } finally { try { if (fis != null) fis.close(); if (fos != null) fos.close(); if (dos != null) dos.close(); } catch (Exception e) {} } return true; } public static boolean convertHTML(String fromfile, String tofile) { try { String htmlCharset = HtmlDocument.convertHtml(fromfile, tofile); System.out.println("htmlCharset: " + htmlCharset); } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertHTML for file: " + fromfile, t); System.err.println("Exception occurred in convertHTML, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } return true; } public static boolean convertPPT(String fromfile, String tofile) { System.err.println("convertPPT not supported yet!"); Thread.dumpStack(); return false; // return false; } public static boolean convertXLS(String fromfile, String tofile) { StringBuffer sb = new StringBuffer(); FileInputStream fis = null; FileOutputStream fos = null; DataOutputStream dos = null; HSSFWorkbook wb = null; try { fis = new FileInputStream(new File(fromfile)); wb = new HSSFWorkbook(fis); int numSheets = wb.getNumberOfSheets(); for (int i=0;i<numSheets;++i) { HSSFSheet sheet = wb.getSheetAt(i); int numRows = sheet.getLastRowNum(); for (int j=0;j<numRows;++j) { HSSFRow row = sheet.getRow(j); if (row == null) continue; int numCells = row.getLastCellNum(); for (int k=0;k<numCells;++k) { HSSFCell cell = row.getCell((short)k); if(cell!=null) { int type = cell.getCellType(); if(type==HSSFCell.CELL_TYPE_STRING) { String str = cell.getStringCellValue(); str=str.trim(); str=replace(str,"\n",""); sb.append(str).append(" "); } } // We will ignore all other types - numbers, forumlas, etc. // as these don't hold alot of meaning outside of their tabular context. // else if(type==, CELL_TYPE_NUMERIC, CELL_TYPE_FORMULA, CELL_TYPE_BOOLEAN, CELL_TYPE_ERROR } // cells //sb.append("\n"); // break on each row } // rows sb.append("\n"); // break on each sheet } // sheets String s = sb.toString(); //now write this string to a file fos = new FileOutputStream(new File(tofile)); //bos = new BufferedOutputStream(fos); //bos.write(s.getBytes()); //what about other language? dos = new DataOutputStream(fos); dos.writeBytes(s); } catch (Throwable t) { if (t instanceof OutOfMemoryError) Logger.getInstance().fatal("OutOfMemoryError occurred in convertXSL for file: " + fromfile, t); System.err.println("Exception occurred in convertXSL, t: " + t); t.printStackTrace(); return false; //something wrong during the conversion } finally { try { if (fis != null) fis.close(); if (fos != null) fos.close(); if (dos != null) dos.close(); } catch (Exception e) {} } return true; } // This should really be made 'static' and moved into a utility class, // included here to simplify things private final static String replace(String line, String oldString, String newString) { if (line == null) { return null; } int i = 0; if ((i = line.indexOf(oldString, i)) >= 0) { char[] line2 = line.toCharArray(); char[] newString2 = newString.toCharArray(); int oLength = oldString.length(); StringBuffer buf = new StringBuffer(line2.length); buf.append(line2, 0, i).append(newString2); i += oLength; int j = i; while ((i = line.indexOf(oldString, i)) > 0) { buf.append(line2, j, i - j).append(newString2); i += oLength; j = i; } buf.append(line2, j, line2.length - j); return buf.toString(); } return line; } public static void main(String[] args) { int index = 0; String action = args[index++]; String f1 = args[index++]; String f2 = args[index++]; long start = System.currentTimeMillis(); long end = 0; if (action.equals("pdf")) convertPDF(f1, f2); else if (action.equals("doc")) convertDOC(f1, f2); else if (action.equals("xls")) convertXLS(f1, f2); else if (action.equals("ppt")) convertPPT(f1, f2); else if (action.equals("ppt")) convertHTML(f1, f2); end = System.currentTimeMillis(); System.out.println(action + " convert " + f1 + " took " + ((end-start)/1000) + " seconds."); } }
main方法主要是输入三个参数 第一个是转换文档的格式,第二个是文档存放的路径,第三个是要输出的文档存放的位置,
然后对输出的文档进行索引, 平均每个文档在1M-5M之间,
问题: 在进行文档转换的时候pdf,word,xls 都非常慢,本来想写一个threadpool来进行文档的转换,可是测试数据表明多线程转换还不如单线程的快,而且也容易出现outofmemory, 后来我又想了一个办法,把大的pdf ,word xls 进行切分,可是写了一个java的切分成小文档的方法,只能对txt文档进行转换,word 和pdf 因为里面有很多格式和样式的东西都是二进制的,在合成一个大的文档就合并不回去了(c++ 或.net 到时有办法切分),所以希望有过索引大量pdf ,word,xls 文档的朋友给写帮助,能快速处理, 目前的数据量大概是1T(大概是100G),服务器配置大概是4个cpu ,4G内存,虚拟机开到了1.2个G用的是jdk1.4在大也开不了了,谢谢帮助
发表评论
-
java调用google map api 根据经纬度读取经纬度地址
2012-02-28 08:42 2877package B7.general; import ... -
java 读取http url joson 格式
2012-02-28 08:39 1175URL url = new URL("htt ... -
【转】用Lucene的SpellChecker实现Google的“您是不是要找”功能
2011-03-25 11:01 1480引言 很多人在使用搜索引擎的时候,会出于各种原因,拼错想要搜 ... -
Java 接口和抽象类区别
2011-03-02 08:58 602一个软件设计的好坏, ... -
php 环境搭建
2009-06-17 17:25 1144想学习php。在网上找了个搭建。好多杂的。google一下时间 ... -
abstract class vc interface
2008-12-10 16:24 1438abstract class 和 interface 都提供可 ... -
二分查找vc线性查找
2008-12-10 14:32 1057public static int binarySearch( ... -
java 取字符串中汉字之前的部门
2008-09-03 17:28 1063String dd="ddfdf你好" ... -
java 数组 操作
2008-08-21 17:30 1067public ArrayList zuhe(){ ... -
查询代码网站
2008-08-17 15:55 763<search terms> Search fo ... -
java String to byte[]
2008-07-16 09:01 4489package mobile; /* * T ... -
java月份时间(第一天,最后一天)
2008-06-13 20:57 7048<% //当前月的最后一天 ... -
java中文件操作大全
2008-05-08 18:07 1002引用: http://www.pben.cn/main.bb ... -
较好的Java网站收集
2008-04-25 14:19 982转自:http://blog.chinaunix. ... -
java 自定义排序
2008-04-21 10:21 2027利用java.util. Comparator接口 和java ... -
2008年Java开发者最迫切的五个期望
2008-03-29 11:28 1218发布日期:2008-1-11 9:11 ... -
Java精华积累:每个初学者都应该搞懂的问题!
2008-03-07 13:20 1065Java精华积累:每个初学 ... -
如何让EditPlus可以编译执行Java程序
2008-02-13 10:51 1798如何让EditPlus可以编译执行Java程序在 USER T ... -
阴阳转换的类! 算法支持1900-2050
2008-02-13 10:49 1368引自: http://www.nqqn.com/ym/68/2 ... -
整理了sun网站java环境下获取网卡信息的资料
2008-02-13 10:14 1586引自:http://www.nqqn.com/ym/68/29 ...
相关推荐
在Java开发中,PDF文档处理是一项常见的任务,特别是在企业级应用中,可能需要将多个PDF文件合并成一个,便于管理和阅读。本实例将探讨如何使用Java进行PDF合并,特别是通过iText库实现这一功能。 iText是一个开源...
Java PDF实现电子签章是PDF文档处理中的一个重要技术,它涉及到PDF库的使用以及数字证书的应用。在这个场景中,我们关注的是使用iTextPDF和PDFBox两个流行的Java库来完成电子签章的功能。这两个库提供了丰富的API,...
基于apache pdfbox库实现Java PDF转图片,带源码和pom文件; 开发环境导入maven工程,PdfToImg为测试类,修改其中test.pdf和test.png的路径即可运行; PDFUtil为独立工具类,可放置任何工程中运行。 如果在linux...
在Java开发中,处理PDF文档是一项常见的任务,特别是在需要搜索、提取或替换PDF中的特定信息时。本篇文章将深入探讨如何使用iText库在Java中实现PDF关键字定位。iText是一个强大的PDF处理库,它提供了丰富的API来...
1.功能:该API为适用于Java平台下,通过后端程序代码调用API接口操作PDF文档,可实现如下功能: 1.1 文档转换:PDF转图片/Word/SVG/XPS/HTML/XPS/TIFF、图片转PDF 1.2 文档操作:文档创建、合并、拆分、压缩、复制...
Java PDF文件处理是一个重要的领域,尤其在开发企业级应用时,常常需要对PDF文档进行创建、编辑、转换或渲染等操作。Aspose.PDF是一款强大的Java库,它为开发者提供了全面的API,使得处理PDF文档变得简单高效。在这...
Java PDF技术是Java开发者在处理PDF文档时常用的一种工具,主要用来创建、编辑或读取PDF文档。在Java中操作PDF,通常会借助第三方库,如iText库,这是一个功能强大的PDF处理库,广泛应用于各种PDF相关的开发任务。 ...
Free Spire.PDF for JAVA 是一个 100% 免费的 PDF API, 在 JAVA 应用程序上调用该组件即可读取,写入和保存 PDF 文档,无需安装 Adobe Acrobat。使用此 JAVA PDF 组件,开发人员可以在 JAVA 应用程序(J2SE 和 J2EE...
在Java开发中,Web打印和PDF打印是两个重要的技术领域,尤其在企业级应用中,它们经常被用来生成报告、发票、合同等文档。本文将深入探讨这些技术,并结合项目描述,提供一个详尽的解释。 首先,让我们从Java Web...
献给对条码感兴趣的朋友,生成PDF417的JAVA包,含有反编译源码
java pdf基础资料java pdf基础资料java pdf基础资料
在Java编程环境中,处理PDF(Portable Document Format)文件是一项常见的任务,这通常涉及到文件的上传、下载、在线预览、删除以及修改等操作。以下是对这些功能的详细说明: 1. **PDF上传**: PDF文件的上传主要...
21天学会java pdf格式的书 相当不错的书
Java PDF Viewer是一款基于Java开发的PDF阅读器,它允许用户在Java环境中查看和操作PDF文档。这个工具提供了多种功能,包括浏览PDF文件、翻页、缩放以及自适应布局,以适应不同屏幕尺寸和宽度的需求。以下是关于Java...
在Java开发中,有时我们需要处理多个PDF文档,例如将它们合并成一个文件或者为合并后的文件生成目录和页码。这个任务通常出现在报告生成、文档整合等场景中。本项目提供了一个纯Java实现的解决方案,它能有效地完成...
在这个项目中,我们主要探讨了利用iTextPDF和PDFBox两个库在Java环境下如何进行PDF电子签名的实现。 iTextPDF是一个流行的Java库,专门用于创建、修改和处理PDF文档。它的电子签名功能强大,支持创建、验证和添加...
java pdf电子书及习题java pd
Java PDF转换为Word是开发过程中常见的一种需求,特别是在文档处理和数据迁移的场景下。Spire.jar包提供了一个高效且方便的解决方案,它是一个由E Dokument Solutions开发的Java库,专门用于处理PDF文档,包括转换为...
java解析PDF格式的文件demo。JAVA实现PDF解析,对PDF文件中的文本内容可输出仅供参考学习,不喜勿喷。