`

利用POI解析本地或者远程包含图片的WORD文件

    博客分类:
  • POI
阅读更多

POI,不用多做解释,在最近的一个CMS项目中,需要读取远程的WORD文件,然后直接发布成HTML内容。word文件中包含的图片必须保存到指定的目录。

 

下面就是我用来处理word文件的类:

MSWordExtractor 类 写道
package com.daren.poi.word;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;



public class MSWordExtractor
{
private HWPFDocument msWord;
private HttpURLConnection connection;
private InputStream inputStream;

/*
* 加载HTTP形式的Word文件
*
* */
public void initHttpExtractor(String fileurl)
{
try
{
URL url= new URL(fileurl);
connection=(HttpURLConnection)url.openConnection();
connection.connect();
inputStream=connection.getInputStream();
msWord = new HWPFDocument(inputStream);

} catch (Exception e) {

e.printStackTrace();
}
}

/*
* 加载本地的Word文件
*
* */
public void initLocalExtractor(String filepath)
{
try
{
inputStream = new FileInputStream(filepath);
msWord = new HWPFDocument(inputStream);
}
catch (Exception e)
{
e.printStackTrace();
}
}

/*
* 读取完word资源后,释放应该释放的对象
*
* */
public void destory()
{
try
{
if(connection!=null)
{
connection.disconnect();
}
if(inputStream!=null)
{
inputStream.close();
}
} catch (Exception e) {

e.printStackTrace();
}
}

/*
* 获取所有的段落文字
*
* */
public String[] getParagraphTexts()
{
Range range = msWord.getRange();
int numParagraph = range.numParagraphs();
String[] paragraphs = new String[numParagraph];
for (int i = 0; i < numParagraph; i++)
{
Paragraph p = range.getParagraph(i);
paragraphs[i]= new String(p.text());
}
return paragraphs;
}

/*
* 获取Word的所有文字
*
* */
public String getMSWordText()
{
return msWord.getRange().text();
}

//将图片保存到指定的目录,并且将图片内容替换成图片的名字
public void extractImages(String directory)
{
try
{
PicturesTable pTable = msWord.getPicturesTable();
int numCharacterRuns = msWord.getRange().numCharacterRuns();
for (int i = 0; i < numCharacterRuns; i++)
{
CharacterRun characterRun = msWord.getRange().getCharacterRun(i);
if (pTable.hasPicture(characterRun))
{
Picture pic = pTable.extractPicture(characterRun, false);
String fileName = pic.suggestFullFileName();
OutputStream out = new FileOutputStream(new File(directory+ File.separator + fileName));
pic.writeImageContent(out);
characterRun.replaceText(characterRun.text(), fileName);
}
}
}
catch (Exception e)
{

e.printStackTrace();
}
}


public static void main(String args[])
{
String httpfile="http://bus.vodone.com:8080/ids/test.doc";
MSWordExtractor mshttp=new MSWordExtractor();
mshttp.initHttpExtractor(httpfile);
System.out.println("[===]\n"+mshttp.getMSWordText());
mshttp.extractImages("C:\\");
System.out.println("[===]\n"+mshttp.getMSWordText());
mshttp.destory();

String localfile="c:\\test.doc";
MSWordExtractor lochttp=new MSWordExtractor();
lochttp.initLocalExtractor(localfile);
System.out.println("[===]\n"+lochttp.getMSWordText());
lochttp.extractImages("C:\\");
System.out.println("[===]\n"+lochttp.getMSWordText());
mshttp.destory();

}
}

 

分享到:
评论

相关推荐

    纯java代码跨平台调用打印机打印word、pdf、图片等。

    综上所述,这个项目展示了如何利用Java的开源库和标准API来构建一个独立且可移植的跨平台打印解决方案,能够处理多种文件格式,包括PDF、Word文档和图片。这对于需要在不同环境中进行文档打印的Java应用来说,具有很...

    poi-ooxml3.9.zip

    标题中的"poi-ooxml3.9.zip"指的是Apache POI项目的一个特定版本,即3.9版,它是一个...这些文件不仅包括了运行时所需的库,还包含了构建和版本控制的相关信息,对于任何使用Apache POI的Java项目来说都是不可或缺的。

    java 读取word

    对于Apache POI库,它是一个广泛使用的API,用于处理Microsoft Office格式的文件,包括Word(.doc和.docx)。以下是使用Apache POI读取Word的基本步骤: 1. 引入Apache POI依赖: ```xml &lt;!-- Maven --&gt; ...

    Android 实现Word转HTML源码

    Apache POI是Java领域的一个流行库,用于处理Microsoft Office格式的文件,包括Word。在Android环境下,由于内存限制和性能考虑,使用Apache POI可能需要进行一些优化,例如分块读取大文件,避免一次性加载整个文档...

    基于XML模板的word导出实例

    5. 保存结果:将生成的Word文档保存到本地或远程服务器。 在实际应用中,这个过程可以进一步封装成一个服务或工具,以方便多次复用。例如,可以创建一个Web接口,接收XML数据和FTL模板,然后返回生成的Word文档。...

    Java 文件预览

    考虑到安全性和性能,文件预览通常不会直接发送整个文件,而是发送文件的一部分或者文件的元数据。例如,对于大文件,可以先发送文件大小,然后分块传输;对于图片,可能仅发送缩略图。 最后,标签“Java 文件预览...

    安卓Excelwordppt文档读写相关-Android平台下将Html文本转换为PDF格式并输出.rar

    这通常涉及下载远程图片或处理本地资源,然后将其转换为PDF兼容的位图格式。 8. **PDF输出**:生成PDF后,需要将其保存到Android设备的存储空间,可以是内部存储或者外部SD卡,并提供一个文件路径供用户访问或分享...

    Office在线预览

    在IT领域,"Office在线预览"是一种常见需求,它允许用户无需下载文件即可在Web浏览器中查看Word、Excel、PowerPoint和PDF等格式的文档。这种功能在协作、分享和远程工作环境中尤为实用,因为它提高了效率并减少了...

    考试类精品--基于jsp+javabean的web在线考试系统,可以实现选择题、填空题、上机题(word、excel.zip

    6. **文件处理**:对于Word和Excel这类文件,系统可能使用Apache POI库来读写和解析。POI是一个开源项目,提供了处理Microsoft Office格式文件的能力。 7. **安全性**:系统应考虑防止SQL注入、XSS攻击等安全问题,...

    java实现docx文档导出已有工具调查.zip

    1. **Apache POI**:Apache POI 是一个广泛使用的开源库,专门用于处理Microsoft Office格式的文件,包括docx。它提供了HWPFOI(用于Word)API,允许开发者直接操作文档的各个元素,如段落、表格、样式等。使用POI...

    将oracle中的表结构导出的工具包

    接下来,运行`ReadOraacleToExcel.jar`这个Java应用程序,它会利用包含的库文件来执行表结构的导出操作。以下是压缩包中包含的一些关键库文件及其作用: 1. **ooxml-schemas-1.0.jar**:这是处理Microsoft Office ...

    新增LIB

    标题“新增LIB”暗示了这个压缩包文件包含了一系列与编程相关的库文件,这些库文件是开发者在进行软件开发时常用到的外部依赖。描述中提到的“博文链接”可能提供了更多关于如何使用这些库的详细信息,但由于我们...

    offoce文档转成pdf

    本文将详细介绍如何使用Java实现这一功能,包括利用第三方工具和自行开发的方法。 首先,让我们来理解标题和描述。"offoce文档转成pdf"是指将Microsoft Office创建的文件(如Word、Excel、PowerPoint)转换为PDF...

    OnlineOfficeEdit

    同时,服务器端通常采用高效的文档解析库,如Apache POI、OpenOffice API等,来处理文档的存储和转换。 二、在线编辑的实现流程 1. **文档加载**:用户通过浏览器访问在线编辑平台,选择要编辑的文档。服务器将...

    FineReport常见的数据集报错错误代码和解释

    - **含义**: 导出Word文件时,不支持每个Sheet具有不同的页面设置。 - **解决方案**: - 统一页面设置。 - 分别导出每个Sheet。 #### 25. **邮件配置参数不正确** - **错误代码**: 1204 - **含义**: 邮件发送...

    网络作业管理系统~~~毕业论文需要的赶快下

    4. 文件处理:利用Apache POI、PDFBox等库处理不同格式的作业文件。 5. 云服务:如阿里云、AWS等,提供稳定的运行环境和大容量的存储空间。 6. 安全技术:OAuth2、JWT等实现用户身份验证和授权,HTTPS保障通信安全。...

    WebOffice 开发文档

    这通常需要对接OpenOffice或LibreOffice等开源办公软件的API,或者使用专门的文件处理库,如Apache POI(处理Microsoft Office格式)。 6. **安全考虑**:在处理敏感的办公文档时,必须考虑安全性问题。包括但不...

Global site tag (gtag.js) - Google Analytics