在最近的一个项目中需要将一段字符类型的文本存为word,html并要将word的内容保存在数据库中,于是就有了如下的一个工具类,希望能对碰到这样需求的朋友提供点帮助。
匆匆忙忙的就copy上来了,没有做一些删减,有一些多余的东西,有兴趣的朋友可以自行略去。我的注释相对比较清楚,可以按照自己的需求进行组合。
在操作word的地方使用了jacob(jacob_1.9),这个工具网上很容易找到,将jacob.dll放置系统Path中,直接放在system32下也可以,jacob.jar放置在classPath中。
代码如下:WordBridge.java
/**
* WordBridge.java
*/
package com.kela.util;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.kela.db.PoolingDataSource;
/**
* 说明: 对word的操作 <p>
*
* @author kela.kf@gmail.com
*/
public class WordBridge {
Log log = LogFactory.getLog("WordBridgt");
private ActiveXComponent MsWordApp = null;
private Dispatch document = null;
/**
* 打开word
* @param makeVisible, true显示word, false不显示word
*/
public void openWord(boolean makeVisible) {
if (MsWordApp == null) {
MsWordApp = new ActiveXComponent("Word.Application");
}
Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible));
}
/**
* 创建新的文档
*
*/
public void createNewDocument() {
Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
document = Dispatch.call(documents, "Add").toDispatch();
}
/**
* 关闭文档
*/
public void closeDocument() {
// 0 = wdDoNotSaveChanges
// -1 = wdSaveChanges
// -2 = wdPromptToSaveChanges
Dispatch.call(document, "Close", new Variant(0));
document = null;
}
/**
* 关闭word
*
*/
public void closeWord() {
Dispatch.call(MsWordApp, "Quit");
MsWordApp = null;
document = null;
}
/**
* 插入文本
* @param textToInsert 文本内容
*/
public void insertText(String textToInsert) {
Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
Dispatch.put(selection, "Text", textToInsert);
}
/**
* 保存文件
* @param filename
*/
public void saveFileAs(String filename) {
Dispatch.call(document, "SaveAs", filename);
}
/**
* 将word转换成html
* @param htmlFilePath
*/
public void wordToHtml(String htmlFilePath) {
Dispatch.invoke(document,"SaveAs", Dispatch.Method, new Object[]{htmlFilePath,new Variant(8)}, new int[1]);
}
/**
* 保存word的同时,保存一个html
* @param text 需要保存的内容
* @param wordFilePath word的路径
* @param htmlFilePath html的路径
* @throws LTOAException
*/
public void wordAsDbOrToHtml(String text, String wordFilePath, String htmlFilePath) throws LTOAException {
try {
openWord(false);
createNewDocument();
insertText(text);
saveFileAs(wordFilePath);
wordToHtml(htmlFilePath);
} catch (Exception ex) {
log.error("错误 - 对word的操作发生错误");
log.error("原因 - " + ex.getMessage());
throw new LTOAException(LTOAException.ERR_UNKNOWN, "对word的操作发生错误("
+ this.getClass().getName() + ".wordAsDbOrToHtml())", ex);
} finally {
closeDocument();
closeWord();
}
}
/**
* 将word保存至数据库
* @param wordFilePath
* @param RecordID
* @throws LTOAException
*/
public void wordAsDatabase(String wordFilePath, String RecordID) throws LTOAException {
Connection conn = null;
PreparedStatement pstmt = null;
PoolingDataSource pool = null;
File file = null;
String sql = "";
try {
sql = " UPDATE Document_File SET FileBody = ? WHERE RecordID = ? ";
pool = new PoolingDataSource();
conn = pool.getConnection();
file = new File(wordFilePath);
InputStream is = new FileInputStream(file);
byte[] blobByte = new byte[is.available()];
is.read(blobByte);
is.close();
pstmt = conn.prepareStatement(sql);
pstmt.setBinaryStream(1,(new ByteArrayInputStream(blobByte)), blobByte.length);
pstmt.setString(2, RecordID);
pstmt.executeUpdate();
} catch (Exception ex) {
log.error("错误 - 表 Document_File 更新数据发生意外错误");
log.error("原因 - " + ex.getMessage());
throw new LTOAException(LTOAException.ERR_UNKNOWN,
"表Document_File插入数据发生意外错误("
+ this.getClass().getName() + ".wordAsDatabase())", ex);
} finally {
pool.closePrepStmt(pstmt);
pool.closeConnection(conn);
}
}
/**
* 得到一个唯一的编号
* @return 编号
*/
public String getRecordID() {
String sRecordID = "";
java.util.Date dt=new java.util.Date();
long lg=dt.getTime();
Long ld=new Long(lg);
sRecordID =ld.toString();
return sRecordID;
}
/**
* 得到保存word和html需要的路径
* @param systemType 模块类型 givInfo, sw, fw
* @param fileType 文件类型 doc, html
* @param recID 文件编号
* @return 路径
*/
public String getWordFilePath(String systemType, String fileType, String recID) {
String filePath = "";
File file = new File(this.getClass().getResource("/").getPath());
filePath = file.getPath().substring(0, file.getPath().length() - 15);
if(systemType.equalsIgnoreCase("govInfo")) {
if(fileType.equalsIgnoreCase("doc"))
filePath = filePath + "/uploadFiles/govInfo/document/" + recID + ".doc";
else if(fileType.equalsIgnoreCase("htm"))
filePath = filePath + "/HTML/govInfo/" + recID + ".htm";
} else if(systemType.equalsIgnoreCase("sw")){
if(fileType.equalsIgnoreCase("doc"))
filePath = filePath + "/uploadFiles/sw/document/" + recID + ".doc";
else if(fileType.equalsIgnoreCase("htm"))
filePath = filePath + "/HTML/sw/" + recID + ".htm";
} else if(systemType.equalsIgnoreCase("fw")) {
if(fileType.equalsIgnoreCase("doc"))
filePath = filePath + "/uploadFiles/fw/document/" + recID + ".doc";
else if(fileType.equalsIgnoreCase("htm"))
filePath = filePath + "/HTML/fw/" + recID + ".htm";
}
return filePath;
}
}
相关推荐
2. **输出数据库中的Word实体**:如果Word文档已经存储在数据库中,可以通过读取这些实体并在客户端显示或下载它们来实现这一功能。 **小技巧**:为了提高用户体验,可以在生成Word文档时添加一些小技巧,比如预先...
java调用PageOffice在线编辑word文件的时候,获取word文档的条目化内容。 PageOffice V4.0 企业版试用序列号:Q37LN-W8NI-KFSQ-LEY3Y 部署步骤: 1. 拷贝simpledemo8文件夹到Tomcat的webapps目录下 2. 访问...
在压缩包文件`java导入word到数据库`中,可能包含了实现这一功能的Java源代码,包括JSP页面、Java后端处理类以及可能用到的配置文件。开发者可以通过阅读和学习这些代码,了解整个流程的实现细节。 总的来说,这个...
例如,你可能会有一个名为`Risk`的Java类,用于封装从Word文档中提取的风险信息,然后在JSP页面上通过EL表达式 `${risk.description}` 显示风险描述。 在压缩包的文件名列表中,"澳洲大堡礁新西兰12天全景之旅.doc...
如果你想要在JSP页面上以原格式显示Word文档,一种可能的方法是使用Java后端处理Word文档,并将渲染后的内容嵌入到HTML的`<iframe>`或者`object`标签中,让用户在浏览器中查看。这可以通过Base64编码文档内容并嵌入...
通过POI,我们可以读取Word文档的内容,并将其转换为HTML格式,然后在JSP页面上显示。 例如,以下是一个简单的步骤: 1. 引入Apache POI的依赖库到项目中。 2. 使用POI的API打开Word文件,如`HSSFWorkbook`或`...
#### 五、Java读取Word模板文件的方法 在Java环境中读取Word模板文件并填充数据,通常需要借助第三方库,例如Apache POI。以下是简化的步骤: 1. **导入Apache POI库**:在项目中添加Apache POI依赖。 2. **读取...
本篇文章将深入探讨如何使用Java技术栈,特别是JSP、Eclipse IDE以及Jacob库来实现在线Word到HTML的转换,以及在线显示PDF和Word文档。 首先,让我们了解JSP(JavaServer Pages)。JSP是一种基于Java的技术,用于...
1. **文件读取**:Java的`java.io`包提供了读取Word文件的API,如`FileInputStream`用于打开文件,`BufferedReader`或`DataInputStream`用于读取文件内容。 2. **解析Word文档**:要将Word文档内容提取出来,可能...
在IT行业中,有时候我们需要将动态数据插入到预设的文档模板中,...通过研究这个示例,你可以更好地理解如何将JSP和Velocity结合,实现在Word模板上的动态数据注入。不过,具体的实现细节需要查看源代码才能详细了解。
例如,可以使用FileInputStream读取Word模板,然后使用POI库处理内容,最后用FileOutputStream将结果输出为新的Word文档。 6. **数据绑定**: 将XML数据绑定到FTL模板,需要理解FreeMarker的语法,如`<#assign>`...
开发者可以在JSP页面中嵌入Java代码,这些代码在服务器上执行,并将结果返回给客户端浏览器。通过JSP,我们可以获取和处理数据库中的数据,然后将这些数据以适合用户需求的形式展现。 Apache POI的引入是为了处理...
标题“利用JSP将数据导出到Word文档”涉及到的是在Web开发中如何使用Java Server Pages(JSP)技术来生成动态的Word文档。这种功能通常用于数据报告、记录保存或者用户需要下载结构化信息的场景。下面我们将深入探讨...
当用户点击下载链接时,JSP页面会向服务器发送一个请求,服务器端的Servlet接收到请求后,读取指定路径的文件,并设置响应头,告知浏览器这是一个要下载的文件,而不是在浏览器中显示。然后,Servlet将文件内容流式...
7. **用户体验**:为了提高用户体验,可以在JSP页面上提供清晰的下载提示,如进度条或“点击下载”按钮,让用户知道何时可以开始下载。 综上所述,用JSP下载Word文件涉及到设置HTTP响应头、读取并发送文件、安全...
在Java JSP中集成FCKeditor,可以创建一个在线编辑器,让用户在网页上编辑和保存内容,例如创建博客文章、论坛帖子或者编辑网站内容。这个过程涉及到以下几个关键知识点: 1. **JSP基础**:首先,我们需要了解JSP的...
在JSP中,你可以使用POI来创建、修改和读取Word或Excel文件,然后将其转换为字节流,通过HTTP响应返回给客户端。 2. **JavaScript导出**:在前端,我们可以利用JavaScript创建一个隐藏的`<iframe>`元素,将服务器...
在处理文档预览方面,Java Web可以实现Word和PDF文件的在线预览,极大地提升了用户体验,使得用户无需下载文件即可查看内容。本项目提供了一套完整的Java Web源码,用于在线预览Word和PDF文件,下面将详细讲解相关...