从伪word格式的doc文件中提取文本内容

从mht文件中提取html内容

最近做的一个程序中,需要把从51job导出来的简历进行解析,51job支持doc和mht格式。开始时以为该doc文件是Word文件,于是采用Apache POI中提供的WordExtractor来进行,从word文件中提取文本内容。

 

Java代码   收藏代码
  1. import org.apache.poi.hwpf.extractor.WordExtractor;  
  2.   
  3.             WordExtractor wordExtractor = new WordExtractor(new FileInputStream(tempFile));  
  4.             content = wordExtractor.getText();  
 

 

测试时,发现总是报异常

 

Java代码   收藏代码
  1. Invalid header signature; read 0x7265762D656D696D, expected 0xE11AB1A1E011CFD0  
 

 

用Notepad++打开看了一下,发现是个文本文件

 

Java代码   收藏代码
  1. mime-version: 1.0  
  2. From: <由 网才@51Job 生成>  
  3. date: 13 Apr 2012 17:20:13 +0800  
  4. subject: Resume  
  5. content-type: multipart/related; boundary=--boundary_578_1d3227f5-c157-41cf-b651-c43d296bd49f  
  6.   
  7.   
  8. ----boundary_578_1d3227f5-c157-41cf-b651-c43d296bd49f  
  9. content-type: text/html; charset=gb2312  
  10. content-transfer-encoding: quoted-printable  
  11.   
  12. <html><body><table width=3D'650' height=3D'62' border=3D'0' align=3D'center'=  
  13.  cellpadding=3D'0' cellspacing=3D'0'><tr><td width=3D'62%' height=3D'60'=  
  14.  align=3D'left' valign=3D'bottom' class=3D'top'>=D3=A6=C6=B8=D6=B0=CE=BB=A3=BA<span=  
 

 

这表明51job生成的doc文件本质上是个mht文件。因此,也得到一个启示:下次如果项目中需要导出word格式文件,也可用mht格式来冒充,反正word也可以正常打开。

 

mht 百度百科 写道
MHTML文件又称为聚合HTML文档、Web档案或单一文件网页。单个文件网页可将网站的所有元素(包括文本和图形)都保存到单个文件中。这种封装使您可将整个网站发布为单个内嵌 MIME (MIME:通过 Internet 连接传递多媒体资源的一列标准。MIME 类型通知程序对象所包含的内容(如图形、声音或视频)的聚合HTML文档(MHTML)文件,或将整个网站作为一个电子邮件或附件发送。Internet Explorer 4.0及更高版本支持此格式。

 

 

现在的问题变成了,怎么从mht中提取html内容了。在iteye上找到了,还挺好用,

thinkgem 的 《Java实现 HTML to MHT》,地址:http://thinkgem.iteye.com/blog/724208

 

使用方法如下:

 

Java代码   收藏代码
  1. String htmlFile = tempFile.substring(0, tempFile.length() - 4) + ".html";  
  2. log.debug("html=" + htmlFile);  
  3. Html2MHTCompiler.mht2html(tempFile, htmlFile);  

 

 

这样之后,htmlFile指定的文件中保存的就是提取出来html内容。在实际的测试中,发现需要对代码做一下小的修改,在类Html2MHTCompiler第441行附近。

 

Java代码   收藏代码
  1. MimeMultipart mp = (MimeMultipart) content;    
  2. MimeBodyPart bp1 = (MimeBodyPart) mp.getBodyPart(0);    
  3. String strEncodng = getEncoding(bp1);    
  4. String strText = getHtmlText(bp1, strEncodng);    
  5. if (strText == null)    
  6.     return;    
 

 

因为我碰到两种情况:

1. strEncodng 可能为空;

2. strEncodng 不为空时,字符串可能带有双引号;

这两种情况都会导致后面的 getHtmlText 调用抛出异常。

 

可修改如下:

 

Java代码   收藏代码
  1. String strEncodng = getEncoding(bp1);  
  2. if (strEncodng == null) {  
  3.     strEncodng = "GBK"// 2012.04.23  
  4. else {  
  5.     strEncodng = strEncodng.replace("\"""");  
  6. }  
  7. String strText = getHtmlText(bp1, strEncodng);  

 

 

至少在我测试的doc/mht文件中能正确处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值