在最近的一个项目中需要将一段字符类型的文本存为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;
}
}
匆匆忙忙的就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;
}
}
发表评论
-
MyBatis的动态SQL详解
2012-08-19 20:44 741MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我 ... -
spring-动态装配bean
2012-03-19 20:04 964http://uu011.iteye.com/admin/bl ... -
XSocket的学习和总结(一)
2012-03-14 14:20 784http://blog.csdn.net/lizhi20040 ... -
xsocket基础学习一
2012-03-14 09:55 11471、这个开源的框架只需要有一个J2SE5.0就行了不需要其他的 ... -
io与nio的区别
2012-03-14 09:52 886io:提供读写操作 nio提供读写操作,基本单位为byteB ... -
详解FreeMarker生成复杂Word文档
2012-03-03 11:57 1003http://www.java.sh/web/freemark ... -
Jacob解决Word文档的读写问题
2012-03-03 11:19 1110转于:北极之光的博客 标签:jacob word com 表格 ... -
Jacob解析word
2012-03-03 11:17 841由于项目需要,取得word的内容,因研究了下Jacob,尽管P ... -
Java服务器端List对象转换为JSON对象并返回客户端实例
2011-04-26 01:53 854http://apps.hi.baidu.com/share/ ... -
如何将tomcat启动注册为系统服务
2011-04-06 04:02 930曾经做过J2EE开发的朋友,一定对Tomcat这个东西最熟 ... -
添加tomcat 服务删除
2011-04-06 03:15 1341tomcat服务删除 关键字: tomcat服务删除 命令行 ... -
如何用Java操作Word, Excel, PDF文档
2011-04-05 03:27 798http://java.ccidnet.com/art/353 ... -
javascript 关闭
2011-03-31 10:32 0http://www.abab123.com/bbs/down ... -
定数显示通知
2011-03-30 11:56 0window.setInterval('shows()',10 ... -
两个LIST比对筛选返回LIST比对结果(转)
2011-03-28 11:09 1308两个LIST比对筛选返回LIST比对结果 不知道大家有没有碰到 ... -
map 转换Set遍历
2011-03-28 10:25 975Map map=new HashMap(); map.put( ... -
java实现mysql 数据库备份
2011-03-21 16:55 1147//db数据库 //ip 备份数据库地址 //user用户名 ...
相关推荐
在Java编程中,生成Word表格文档通常涉及到使用第三方库,如Apache POI,这是一个流行的API,专门用于处理Microsoft Office格式的文件,包括Word(.doc/.docx)。本篇文章将深入探讨如何使用Java和Apache POI从...
Java 动态生成 Word 文档(含表格、柱状图)并下载是指利用 Java 语言动态获取数据库信息,并将其生成为 Word 文档(含表格、柱状图),并提供下载功能。该功能主要应用于数据报表生成和下载,例如测试报告、统计...
在IT行业中,尤其是在Java开发领域,批量生成Word文档是一项常见的需求,特别是在大数据处理、报告生成或自动化办公场景中。PageOffice是一款强大的Java组件,专为处理Office文档提供解决方案,包括创建、编辑、转换...
本实例将探讨如何使用Java代码实现填充Word模板并生成Word合同。 首先,我们需要理解Apache POI库。Apache POI是Java平台上的一个开源项目,它允许Java应用程序读取、写入和修改Microsoft Office格式的文件,包括...
以上就是使用Java生成Word文档的基本步骤和关键知识点。实际应用中,你可以根据需求扩展这些基本元素,构建更复杂的Word文档结构。在处理大量数据或复杂格式时,理解并熟练运用Apache POI库至关重要。
- 运行上述Java程序,将自动填充报表模版,并根据指定的输出路径生成Word文档。 #### 五、总结 通过上述步骤,我们可以轻松地使用Java调用iReport工具来生成Word报告。此外,对于需要生成Excel或PDF格式的报告,只...
本系统的主要目标是让用户能够通过下拉列表选择部门数据,然后通过单击“创建名单”按钮,系统自动生成数据并将数据填充到Word模板中,生成Word文件供用户下载。当用户点击下载图标后,会弹出“文件下载/文件打开”...
在Java编程环境中,生成Word文档是一项常见的任务,尤其在企业级应用中,如报告生成、数据分析等场景。XML解析方式是一种高效且灵活的方法,能够帮助我们实现这一目标。本篇文章将详细探讨如何利用Java和XML解析来...
Java生成Word模板是一种常见的技术,尤其在企业级应用中,用于自动生成报告、合同或任何需要格式化的文本文档。这个技术通常涉及到Java的IO流处理、模板引擎以及可能的库如Apache POI或OpenOffice API。 Apache POI...
然后,它将这些信息整理成易于阅读的文本格式,并保存为TXT文件。 JDBC是Java连接数据库的标准接口,它允许开发者编写不依赖特定数据库系统的代码。通过加载数据库驱动,建立数据库连接,执行SQL语句,然后处理返回...
在Java编程环境中,生成...以上就是使用Java生成Word文档的关键知识点。在实际开发中,你可能还需要结合MVC框架、数据库操作等进行更复杂的集成。通过掌握这些技术,你可以构建强大的文档生成系统,满足各种业务需求。
总的来说,Java调用PageOffice生成Word是一种高效、灵活的方法,尤其适用于需要从数据库中动态获取数据并填充到文档的场景。通过熟练掌握PageOffice的使用,开发者可以提升企业级应用的文档处理能力,提高工作效率。
Java生成数据库字典表MySQL Doc-Generator是一款实用的工具,旨在帮助开发者将MySQL数据库中的表结构信息导出为Word文档,方便进行数据库设计文档的整理和分享。这个工具简化了手动编写数据库字典表的过程,提高了...
这里我们将深入探讨如何实现这一过程,并重点关注MySQL数据库的表结构和注释的提取,以及如何利用Java的iText库生成Word文档。 首先,MySQL是一个广泛使用的开源关系型数据库管理系统,其强大的功能和灵活性使其...
5. **保存和导出**: 最后,生成的Excel文件会被保存并提供给用户下载,便于他们在Excel环境中进一步处理或分享这些数据。 这个工具对于数据库管理员、开发人员和数据分析师来说非常有用,因为它允许他们快速地查看...
总的来说,这个项目展示了Java在数据处理和文档生成方面的强大能力,通过利用JDBC连接数据库,结合Apache POI库将数据库表数据转化为易于阅读和分享的Word或Excel文档。这样的工具对于数据分析师、数据库管理员和...
3. **Java端处理**:使用Apache POI创建Word文档,并将Echarts生成的图表图片插入到文档中。可以使用`XWPFDocument`、`XWPFParagraph`、`XWPFPicture`等类来创建和编辑文档内容。 4. **图片处理**:将前端生成的...
5. **写入输出文件**:完成所有替换后,我们需要创建一个新的Word文档并使用XWPFDocument的write方法将更新后的内容写入。 6. **资源释放**:最后,确保关闭所有打开的流,以避免内存泄漏。 压缩包中的“word...
这段代码展示了如何在Java中使用FreeMarker模板引擎生成Word文档并进行下载。FreeMarker是一个开源模板引擎,可以用于生成文本输出,如HTML、XML、Word文档等。在这个例子中,`WordUtil` 类提供了两个主要方法: 1....
6. **生成新文件**:完成替换后,使用POI或iText保存为新的Word或PDF文件,并返回生成文件的URL或将其作为HTTP响应的一部分发送给客户端。 7. **错误处理和资源管理**:确保正确关闭打开的文件流和释放占用的资源,...