java 调用jacob和java2word导出word,并实现将带有格式的html文本和图片插入word
来源:互联网 发布:牛顿环实验数据 编辑:程序博客网 时间:2024/04/30 03:20
文章实现内容介绍及环境配置、开发过程
实现内容
1--网站前台:本文jsp页面类似于报名表一类,客户要求报名表中大本文输入的地方可以copy整篇文章放入且带有段落格式,该地方使用CKEdtiro网页编辑器实现。
2--OA办公后台:客户使用的平台,可以看到网站用户填报的报名表,并有导出word功能。可以见报名表导出到word。word中包含html文本,图片附件。
环境配置
1--我的计算机为win10,64位,jdk1.6.10,myeclipse10,项目为jboss
2--需要的jar包jar1.jar (该jar包为jacob和java2word整理合并后jar包,为什么要合并后文叙述),具体的jacob.jar 、java2word.jar、ckeditor-java-core-3.5.3.jar
3--需要运行的安装文件Java2Word1.1+Install.exe(用于java2word方法实现的支持),下载ckeditor4.6插件包
4--下载jacob-1.18-M2.zip,里面包含jacob.jar、jacob-1.18-M2-x64.dll、jacob-1.18-M2-x86.dll文件
5--下载java2word压缩包,包含Java2Word.jar、Java2Word1.1+Install.exe
6--将jacob-1.18-M2-x64.dll放入项目jdk-bin目录、C盘windows-system32、C盘windows-sysWOW64下,运行Java2Word1.1+Install.exe一直下一步就行
7--将jacob.jar和java2word.jar、放入项目lib包下,将ckeditor-java-core-3.5.3.jar(网站项目包)放入项目lib包下,将ckeditor4.6文件夹放在项目根目录
开发过程
网站前台-ckeditor网页编辑器的简单使用:
jsp页面头部增加引入
<%@page import="com.ckeditor.CKEditorConfig"%>
<%@page import="com.ckeditor.EventHandler"%>
<%@ taglib uri="http://ckeditor.com" prefix="ckeditor" %>
<script type="text/javascript" src="<%=contextPath%>/ckeditor4.6/ckeditor.js"></script>
<%
CKEditorConfig settings = new CKEditorConfig();
settings.addConfigValue("toolbar","[[ 'Source', '-', 'Bold', 'Italic' ]]");
%>
html部分
<td class="tdcell_word3" colspan="4">
<p style="color:red;">填报说明:产品研发背景2.创新技术介绍3.主要参数、结构特点、精度水平4.市场性及产业化前景</p>
<textarea name="sbzp_ysshuoming" id="sbzp_ysshuoming" cols="100" rows="10">
1.产品研发背景2.创新技术介绍3.主要参数、结构特点、精度水平4.市场性及产业化前景
</textarea>
<span class="notnull">*</span>
<br><span id="sbzp_ysshuomingmes" style="display:none" class="mes"></span>
</td>
js部分
<script type="text/javascript">
var editor = null;
window.onload = function(){
editor = CKEDITOR.replace('sbzp_ysshuoming'); //参数‘content’是textarea元素的name属性值,而非id属性值
/*
CKEDITOR.instances["sbzp_ysshuoming"].on("instanceReady", function () {
this.document.on("blur", AutoSave1);
//this.document.on("focus", AutoSave);
});
*/
var oEditor = CKEDITOR.instances.sbzp_ysshuoming;
oEditor.on("blur", AutoSave1);
oEditor.on("focus", AutoSave);
}
function AutoSave1() {//相应的操作过程,可以按下面写,也可以按一般javascript过程写。
var oEditor = CKEDITOR.instances.sbzp_ysshuoming;
var conentText = oEditor.getData();
if(conentText == null || conentText == ""){
oEditor.setData("<p>1.产品研发背景2.创新技术介绍3.主要参数、结构特点、精度水平4.市场性及产业化前景</p>");
}
}
function AutoSave() {
var oEditor = CKEDITOR.instances.sbzp_ysshuoming;
var conentText = oEditor.getData();
if(conentText.indexOf("<p>1.产品研发背景2.创新技术介绍3.主要参数、结构特点、精度水平4.市场性及产业化前景</p>")>=0){
oEditor.setData("");
}
}
</script>
这段js我是直接放在jsp页面中的,注意一定要放在文本域td之后,AutoSave和AutoSave1位编辑器输入框失去、获得焦点事件
表单提交时关于ckedtior的校验
//验证 参评产品优势说明 大文本框 是否输入
var oEditor = CKEDITOR.instances.sbzp_ysshuoming;
var contentEdtior = oEditor.getData();
if(contentEdtior == "" || contentEdtior == null || contentEdtior.indexOf("<p>1.产品研发背景2.创新技术介绍3.主要参数、结构特点、精度水平4.市场性及产业化前景</p>")>=0){
//显示提醒选择消息
$("#sbzp_ysshuomingmes").show().text("请输入“参评产品优势说明”!");
oEditor.focus();
return false;
}else{
oEditor.setData(oEditor.getData());
for ( instance in CKEDITOR.instances ){
CKEDITOR.instances[instance].updateElement();
}
}
var len = contentEdtior.length*2;
if(len>3000){
oEditor.focus();
$("#sbzp_ysshuomingmes").show().text("参评产品优势说明”必须小于3000个字!");
return false;
}
ckeditor效果图
---------------------------------------我是分割线----------------------------------------------
后台对报名表导出到word的处理
1--将要导出的word只作为一个ftl模板
新建一个word,按照要导出的格式制作模板,客户填写或输入的内容用标识符表示
例如
做好之后,另存为xml,然后修改标签,就是你要替换的标识符,尽量用${qy_name}这样的格式,标签修改之后保存直接修改文件后缀名为.ftl
模板就做好了
2--替换标签
从数据库根据id取出对应报名表所有数据,按照 ftl 模板中标签顺序依次将对应的信息封装到一个hashMap中,需要替换图片或带格式文本的地方暂不处理(其实就是原来的标签是什么,还put进去什么)
使用freemark中Template.process(dataMap, out);方法生成一个word ,该word中除了图片和带格式文本其他的标签就可以替换掉了
3--将html文本从数据库取出使用并拼接上html文件的头部和尾部作为一个html通过poi的读取流写入一个word文档并保存。
4--由于上一步保存的word中含有html标签,直接导出报错,writer error类写入错误,因为该文件相当于html版的伪word,所以加一步操作,调用jacob打开该文件复制其中带格式的文本,粘贴到一个新的word中保存。
5--这时就可以调用java2word将新word中的文本插入要替换的标签处,并将标签替换为空。
6--最后一步,调用java2word将图片插入图片标签对应位置。一个标签处可以插入多个图片。
至此,导出word功能经测试亦可以完美使用,并带有用户上传的图片,及大文中用户上传的文章格式是什么样,word中就是什么样。
7--到这儿,该功能本应该结束了。出现一个让我很郁闷的问题。之前有个功能使用jacob将合同导出到word加盖印章并转为pdf。该功能中单独调用了jacob包,测试后发现jacob与java2word中的jacob方法不同但包名文件名,都相同,这两个jar包会冲突。
该问题困扰了我一周时间。经过不停反编译jacob和java2word源码对比后发现,java2word中重写了jacob中方法,大部分方法名相同参数类型不同。再试了n中方法无用之后,无奈把java2word中所有类反编译到jacob中,与原jacob中方法合并。才导致我只用了一个jar包(jacob1.jar)解决该冲突。并实现了最终效果。
在博客中记录这次处理该问题步骤及方法以便以后可以节省时间。希望对广大码友们有所帮助。
详细代码,上传后请到csdn下载链接进行下载。
整合后jar下载地址:
http://download.csdn.net/detail/qq_27877761/9715366
本文上述所有涉及到jar和源码下载地址(含整合后jar):
http://download.csdn.net/detail/qq_27877761/9715430
本文写的可能有遗漏或未说清楚的地方,如有疑问联系qq-731352908,欢迎一起讨论。加qq时注明,对csdn问题有疑问。
- java 调用jacob和java2word导出word,并实现将带有格式的html文本和图片插入word
- 基于freeMarker和jacob的word导出
- java 导出word并插入图片
- Jacob 将word和excel转换成html
- 使用Jacob调用word将word转换为html
- 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)
- Java使用jacob调用默认打印机打印Word和excel
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- html转word,使用jacob和poi
- java调用Word中Replace的实现方法(jacob)
- jacob实现word转html
- java jacob html 转word
- jacob实现word和xml的互转化
- java 使用freemarker 导出word 和图片
- java2Word在Word文档指定位置插入图片或者文字
- java2Word在Word文档指定位置插入图片或者文字
- java通过jacob调用word
- JavaScript函数
- 防止因内存满而发生paging
- 连接ElasticSearch获取客户端client时报错
- SpringMVC的Controller层参数绑定以及返回值
- linux下 安装 显卡驱动遇到的问题
- java 调用jacob和java2word导出word,并实现将带有格式的html文本和图片插入word
- js数据存储方法及处理
- H.264中的指数哥伦布解码
- nginx无法启动提示libpcre.so.1: cannot open shared object file
- 利用ffmpeg的filter混音
- table 排名自动刷新
- 【工具】小巧好用的屏幕截图工具——ScrToPic
- 在一个千万级的数据库查寻中,如何提高查询效率?
- jqGrid设置可编辑单元格为不可编辑状态