java动态生成word

我想弄一个java网站上的可以生成word,上网搜索了几天,找到几个可以java令jsp(html)转换成word的有jacob和poi,

还有JS,还有在jsp上添加头文件,,JS生成是可以符合我的要求,但在用到火狐的时候,这个生成方式就不行了,而且这个生

成方式的缺点比较慢,JSP添加头文件则不大灵活,相当于有一个浏览的页面就必须有一个下载的页面,数据量小的时候还可

以,如果大了也是有它的弊端的,而jacob的资料都是比较复杂,有html转换成word的但例子都是本地html转换成DOC,你没可

能要求客户还下载你页面吧,而poi网上说的都是它比较差,我就没有细细去找POI了,还有一个重点是我网站系在的word是动

态的,就是我需要的时候才生成而不是已经存在于项目或者数据库,因为要下载的word的内容是随时可以更新的,所以word的

生成必须是在用到才产生,而且需要生成word的量是比较大的,希望各位大侠指导指导

------解决方案--------------------

设置特定的模版,按照自己的标准设置变量

在后台管理中,复制一份模板,然后填充新模板中对应的变量

下载更新后模板。

模板格式可以随意调整,只要变量不变。

下载 jacob.jar 包

package com.shengsiyuan;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

import java.util.Map.Entry;

import com.jacob.activeX.ActiveXComponent;

import com.jacob.com.Dispatch;

import com.jacob.com.Variant;

public class Word {

public static boolean changeWord(String docPath, Map map) {

ActiveXComponent component=null;

try {

component = new ActiveXComponent(

"Word.Application");

component.setProperty("Visible", new Variant(false)); // 设置word不可见

Dispatch docs = component.getProperty("Documents").toDispatch();

Dispatch doc = Dispatch.invoke(

docs,

"Open",

Dispatch.Method,

new Object[] { docPath, new Variant(false),

new Variant(false) }, new int[1]).toDispatch();

Dispatch selection = component.getProperty("Selection")

.toDispatch();// 获得对Selection组件

Dispatch.call(selection, "HomeKey", new Variant(6));// 移到开头

Dispatch find = Dispatch.call(selection, "Find").toDispatch();// 获得Find组件

Set set = map.entrySet();

Iterator iter = set.iterator();

while (iter.hasNext()) {

Entry entry = (Entry) iter.next();

Dispatch.put(find, "Text", entry.getKey()); // 查找字符串"name"

Dispatch.put(find, "MatchCase", "True"); // 大小写匹配

Dispatch.put(find, "MatchWholeWord", "True"); // 全字符匹配

boolean b = Dispatch.call(find, "Execute").getBoolean(); // 执行查询

// 循环查找, 知道一个就替换一个 并且移动到下一位

while (b) {

Dispatch.put(selection, "Text", entry.getValue());

Dispatch.call(selection, "MoveRight"); // 替换之后移动到下一位 重要 or

// 出现死循环

b = Dispatch.call(find, "Execute").getBoolean(); // 判断是否还存在

// 执行替换替换

}

Dispatch.call(selection, "HomeKey", new Variant(6));// 移到开头

}

Dispatch.call(doc, "Save"); // 保存

Dispatch.call(doc, "Close", new Variant(false));

} catch (Exception e) {

e.printStackTrace();

} finally {

component.invoke("Quit", new Variant[] {});

component.safeRelease();

}

return true;

}

public static void main(String[] args) {

Map map = new TreeMap();

map.put("#(name)", "张三");

map.put("#(age)", "18");

map.put("#(sex)", "man");

changeWord("D:\\a.doc",map);

}

}

word里面内容

姓名:#(name)

年龄:#(age)

性别:#(sex)

------解决方案--------------------

jacob速度比较慢必须windows平台的,poi的支持有一定问题 有可能打不开你自己选择一下吧

------解决方案--------------------

用iText这个jar,非常简单

File docFile = new File(model.getFilePath());

if(docFile.exists()){

docFile.delete();

}

try {

docFile.createNewFile();

BufferedOutputStream writer =new BufferedOutputStream(new FileOutputStream(docFile));

//设置文件头

writer.write(doc.ReportHead().getBytes());

for(int i=0;i<9;i++) writer.write(doc.PeportParagraph(" ").getBytes());

writer.write(doc.PeportParagraph(model.getReportTitle(),36,"BC").getBytes());

//画间距

for(int i=0;i<20;i++) writer.write(doc.PeportParagraph(" ").getBytes());

table.set_width("40,60");

table.set_noborder();

table.add_cell(doc.new ReportCell(doc.PeportChunk("模板创建人:",16),"R"));

table.add_cell(doc.new ReportCell(doc.PeportChunk(model.getCreateUser(),16)));

table.write_cell(writer);

writer.write(doc.NewPage().getBytes());

writer.write(doc.ReportEnd().getBytes());

writer.flush();

writer.close();

照着这个写就OK了,网上搜一下,很多API的。

------解决方案--------------------

Quote=引用:]

这里的模版就和你写的jsp差不多,都是通过标签控制的,如果你没有数据用标签控制一下就是了,有数据就显示没有数据就不现实

java自动生成word,java动态生成word解决方案相关推荐

  1. Java中利用freemarker模板动态生成word含表格

    最近公司有导出word的需求,由于word的样式有的很复杂所以记录一下Java中利用freemarker模板动态生成word含表格,以防以后忘记. 1.word表格的模板 删掉无用的数据留下基础的样式 ...

  2. SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格、合并单元格)

    本编文章继SpringBoot+Poi-tl根据Word模板动态生成word(含动态行表格)文章之后 介绍Poi-tl导出word的延伸功能: 所需依赖以及word模板所属位置 见 SpringBoo ...

  3. java基于word模板动态生成word及转pdf实践

    在项目中很容易会遇到需要动态生成pdf的应用场景,其实现方式也比较多 由于项目的关系,对于这种组件性的开发方式我想的是怎么方便怎么来,怎么快就怎么来 在咨询了之前做政务系统的同学后,他们都一致推荐我使 ...

  4. Java使用FreeMarker模版技术动态生成word实践

    一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...

  5. POI利用word模板动态生成word报表以及动态生成word表格

    目录 核心依赖 动态表格 测试类 工具类 动态数据 测试类 工具类 核心依赖 <dependency><groupId>org.apache.poi</groupId&g ...

  6. 动态生成java类_Java 运行时动态生成class

    Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢? 因为在有些时候,我们还真得在运行时为一个类动态创建子类.比如,编写一个O ...

  7. 【PHPWord】基于Word模板替换生成输出表格动态生成内容、合并单元格、设置单元格背景颜色

    文章目录 一.前言 二.业务需求 三.功能实现 1.处理数据 2.Word模板 3.输出动态数据 四.完整代码和模板 1.Word模板 2.完整代码 五.总结 一.前言 在之前的文章中,我们做了直接生 ...

  8. generator代码自动生成工具(动态生成注释、类注解、方法注解等)适用于swagger等需要配置实体类的场景

    generator代码生成器大家都不陌生,但是在实际的业务场景中,实体类只有属性.getter/setter方法不满足需求,还需要手动去添加需要的功能.比如项目使用swagger生成api文档时,需要 ...

  9. iden中html中表格自动生成,JS实现动态生成html table表格的方法分析

    本文实例讲述了JS实现动态生成html table表格的方法.分享给大家供大家参考,具体如下: 刚在论坛上面逛的时候看到有人问html表格怎么动态生成,我回了一下发现有好多小伙伴追问- - 看来还是有 ...

  10. 动态生成类_springboot动态生成类属性

    利用动态代理实现类中属性的动态生成. 使用场景:当不确定返回类中字段个数时,可使用动态生成属性个数实现需求.  注意:由于CGLib由于是采用动态创建子类的方法,对于final方法,无法进行代理. 引 ...

最新文章

  1. 2019最新实战!给程序员的7节深度学习必修课,最好还会Python!
  2. linux内核中符号地址的获取
  3. mybaits三:全局配置文件(全面)
  4. (chap6 Http首部) 首部字段概论
  5. 你的项目刚刚启动?是时候考虑Globalization了!
  6. python可以处理矩阵吗_Python 稀疏矩阵处理
  7. 基于Android的rgb七彩环颜色采集器
  8. Java解析SQL生成语法树_Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python...
  9. Python基础-文件操作
  10. smbinning包:R语言下的分箱处理工具
  11. 基于RV1126平台imx291分析 --- 先研究media再分析应用调用
  12. Adobe Reader历史版本安装包下载
  13. 树莓派USB摄像头和motion实现网络监控
  14. Chfs 文件共享工具
  15. 面试官:你在平时的工作中遇到过哪些问题让你印象深刻?
  16. spring深入学习(十九) IOC 之 Factory 实例化 bean
  17. jop怎么读音英语怎么说_job的意思在线翻译,解释job中文英文含义,短语词组,音标读音,例句,词源,同义词【澳典网ODict.Net】...
  18. openpyxl详解
  19. ONEXBBC 报错
  20. 从蓝光到4K,腾讯视频高码率下载背后的技术

热门文章

  1. <机器学习>支持向量机(SVM)理论
  2. 移动开发之设计模式- 中介者模式(IOSAndroid)
  3. SQL 分析大盘走势
  4. oracle查询员工表领导级别,emp表中怎么统计每个员工的领导的年薪,并按年薪由高到低排列...
  5. iTunes C盘占用空间太大 解决方案
  6. 深入浅出WMS之出库流程解析
  7. MyBatis学习笔记2 ——第一个MyBatis程序
  8. hdu 5594 ZYB's Prime 最大流
  9. 设计模式之--中介者模式
  10. 一个普通的小活动让超市回头客源源不断?方案简单到爆