热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javaword文档生成_java生成word文档

java生成word文档有多种方式:1:Jacob是Java-COMBridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使

java生成word文档有多种方式:

1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。该方案只能在windows平台实现,是其局限性。

2:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。

3:Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。填充数据到表格中读取表格数据 ,1.1版增强的功能: 指定文本样式,指定表格样式。如此,则可动态排版word文档。是一种不错的解决方案。

4:iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。功能强大。

5:JSP输出样式,该方案实现简单,但是处理样式有点缺陷,简单的导出可以使用。

6:用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。

常用的可以通过创建word模板,另存为 xml 格式文件替换word 文档中需要替换数据的地方,再修改后缀为 .ftl 格式的文件来操作:

1. 创建word文档:

3a005092117678a86be691e37c38f1e4.png         

500eece143642b6974637ac9b9015142.png

2. 把word文档另存为 .xml 格式的文件,用office打开 .xml文件并把需要生成数据的位置用${}替换,就和jsp等页面中的EL表达式一样:

820a4bbf66ed283f09d8318ff6b542f9.png      

2ded49557109b63f774d6eee7ec1a4c6.png

3. 用编辑器打开这个 .xml格式的文件,最好是能够格式化format的编辑器,便于后面添加列表数据 ${list}:

0059df07f6942c6c19520989400c6ece.png

格式化format后:

d2fa4387599440867599692663fb792e.png

4. 找到需要列表的前后位置,添加接收代码,(接收列表,列表中的原参数需要略微改变,不接收列表则直接可以用key接收):

b3fe626b989d54873fad2b1513a46ed4.png  

12660cebf5bf7cdc82e93264bd4f9a09.png   

883b097a9fdb38288826835478357c74.png

5. 修改完成后把 .xml 后缀改为 .ftl 后缀:

c5225cb38f73df40bcc844fd20f258fd.png

6. java测试代码:

d250f4b7d9c6d40ddb483d3a5e39b972.png

464d693a94fda838052912bb5b8f679b.png

7. 生成word文档如下:

3bf26105b826306e489d8e518b255f17.png

8. java代码为:

packagedoword;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importfreemarker.template.Configuration;importfreemarker.template.Template;importfreemarker.template.TemplateException;public classDocUtil {/*** 项目文件操作地址*/

public static finalString getfileUrl(){

String fileUrl= Thread.currentThread().getContextClassLoader().getResource("").getPath();if("acs".equals(fileUrl.substring(1,4))){

fileUrl= (fileUrl.substring(0,fileUrl.length()-16)) + "WEB-INF/classes/file/";//阿里聚石塔

}else if("usr".equals(fileUrl.substring(1,4))){

fileUrl= (fileUrl.substring(0,fileUrl.length()-16)) + "WEB-INF/classes/file/";//linux

}else{

fileUrl= (fileUrl.substring(1,fileUrl.length()-16)) + "WEB-INF/classes/file/";//windows

}returnfileUrl;

}/*** 创建word文档

*@paramdataMap 写入文档的内容

*@parampath ftl文件所在文件夹位置(如:D:/testfile/)

*@paramfileName ftl文件名

*@paramoutPath word文件输出文件夹位置(如:D:/testfile/)

*@returnoutFilePath word文件输出地址(如:D:/testfile/xxx.doc)*/

public static String createWord(HashMapdataMap, String path, String fileName,String outPath){

String outFileName= null;

Template t=null;try{

Configuration configuration= newConfiguration();

configuration.setDefaultEncoding("UTF-8");

configuration.setDirectoryForTemplateLoading(newFile(path));

t= configuration.getTemplate(fileName); //文件名

} catch(IOException e) {

e.printStackTrace();

}

outFileName= new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() +".doc";

String outFilePath= outPath +outFileName;//如果文件夹不存在则创建

File outPathFolder = newFile(outPath);if(!outPathFolder.exists() && !outPathFolder.isDirectory()){

outPathFolder.mkdir();

}

File outFile= newFile(outFilePath);

Writer out= null;try{

out= new BufferedWriter(new OutputStreamWriter(newFileOutputStream(outFile)));

}catch(FileNotFoundException e1) {

e1.printStackTrace();

}try{

t.process(dataMap, out);if(out != null){

out.close();

}

}catch(TemplateException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}returnoutFileName;

}public static voidmain(String[] args) {

HashMap dataMap &#61; new HashMap<>();

dataMap.put("title", "报名人员名单");

dataMap.put("year", "2018");

dataMap.put("month", "06");

dataMap.put("day", "04");

dataMap.put("createusername", "妙木山自来也");

List> list &#61; new ArrayList>();for (int i &#61; 0; i <20; i&#43;&#43;) {

Map map &#61; new HashMap();

map.put("username", "张三");

map.put("age", "28");

map.put("position", "程序猿");

map.put("tel", "15656565656");

list.add(map);

}

dataMap.put("list", list);

String createWord&#61; createWord(dataMap, "D:/testword/", "test1.ftl", "D:/testword/");

System.out.println(createWord);

}

}

9. 所需JAR包&#xff1a;

419d8296815a658855b134b48bfa8706.png



推荐阅读
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了使用Python编写购物程序的实现步骤和代码示例。程序启动后,用户需要输入工资,并打印商品列表。用户可以根据商品编号选择购买商品,程序会检测余额是否充足,如果充足则直接扣款,否则提醒用户。用户可以随时退出程序,在退出时打印已购买商品的数量和余额。附带了完整的代码示例。 ... [详细]
  • 本文介绍了如何使用PHP代码将表格导出为UTF8格式的Excel文件。首先,需要连接到数据库并获取表格的列名。然后,设置文件名和文件指针,并将内容写入文件。最后,设置响应头部,将文件作为附件下载。 ... [详细]
author-avatar
CJFONe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有