博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java使用Aspose向word模板写入数据
阅读量:5168 次
发布时间:2019-06-13

本文共 3493 字,大约阅读时间需要 11 分钟。

  Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务。Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XPS,EPUB和其他格式。使用Aspose.Words可以在不使用Microsoft.Word的情况下生成、修改、转换和打印文档。

1、Aspose在maven下的包引用,例如:

com.mlsc
aspose-cells
8.3.1
View Code

2、word模板

    创建一个word文档,asposeTemplate.docx,内容如下:

 

xxx部门人员信息表

 

部门名称*

$department$

 

姓名

性别

职务

身份证号

联系电话

«TableStart:staffList»«staff»

«name»

«sex»

«post»

«IDNum»

«TableEnd:staffList»«phoneNum»

 

 

   

  说明:文档中的«name»等尖括号内容,是通过菜单的"插入→文档部件→域”找到MergeField并输入相应的域名而来。

3、java代码实现模板填充

 (1)获取模板文件路径

  例如:在webapp/file文件夹下,String templateFilePath = request.getServletContext().getRealPath("") + "/files/asposeTemplate.docx";

(2)获取aspose的许可证

  例如:通过配置的license.xml文件,设置许可

InputStream is = this.getClass().getClassLoader().getResourceAsStream("license.xml");ByteArrayOutputStream dstStream = null; //填充后的文档输出流License aposeLic = new License();aposeLic.setLicense(is);

  license.xml内容如下:

Aspose.Total for Java
Aspose.Words for Java
Enterprise
20991231
20991231
8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7
sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=
View Code

(3)获取文档对象

  Document doc = new Document(templateFilePath);

(4)填充word模板中$$占位字段

  doc.getRange().replace("$department$", data.getDepartment, true, false); //data.getDepartment 部门名称

(5)填充word模板中«»占位字段

  (a)从数据源获取员工集合,如

List
staffList = data.getStaffList();

  (b)创建名称为staffList的DataTable,并绑定字段

DataTable staffTable = new DataTable("staffList");staffTable.getColumns().add("staff");staffTable.getColumns().add("name");staffTable.getColumns().add("sex");staffTable.getColumns().add("post");staffTable.getColumns().add("IDNum");staffTable.getColumns().add("phoneNum");

  (c)循环员工集合,构建新的DataTable,填充每一个员工的信息

for (int i = 0; i < staffList.size(); i++) {      Staff staff = staffList.get(i);      DataRow row = visitPersonsTable.newRow();      row.set(0, "员工信息");      row.set(1, staff.getName());      row.set(2, staff.getSex());      row.set(3, staff.getPost());      row.set(4, staff.getIDNum());      row.set(5, staff.getPhoneNum());      staffTable.getRows().add(row);}

  (d)递归填充,替换文档中mergeField域字段 

doc.getMailMerge().executeWithRegions(staffTable);

  (e)单元格的合并,样式设置

DocumentBuilder builder = new DocumentBuilder(doc);builder.moveToCell(0, 2, 0, 0);  //移动到第一个表格的第3行第一个格子(即tableStart)builder.getCellFormat().setVerticalMerge(CellMerge.FIRST);for(int i = 1; i < staffList.size() + 1; i++ ) {       builder.moveToCell(0, 1 + i, 0, 0);      builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS);}

  (e)保存并返回文件流

dstStream = new ByteArrayOutputStream();doc.save(dstStream, saveFormat);return dstStream.toByteArray(); //返回的文件流

 4、填充结果文档

  web项目可通过HttpServletResponse返回下载填充后的文档,例如在controller中,可如下处理

response.setContentType("application/octet-stream; charset=utf-8");       response.setHeader("Content-Disposition", "attachment;  filename=" + URLEncoder.encode(genfileName, "utf-8").replace("+", "%20"));  //genfileName要生成的文件名OutputStream out = response.getOutputStream();out.write(outByte);
View Code

  填充后的文档类容如下图:

   
    

 

转载于:https://www.cnblogs.com/super-yu/p/10395338.html

你可能感兴趣的文章
python flask解决上传下载的问题
查看>>
语法测试
查看>>
CES1
查看>>
CES2
查看>>
文件方式实现完整的英文词频统计实例
查看>>
ListControl的用法
查看>>
单个SWF文件loading加载详解(转)
查看>>
SQLServer中的CTE通用表表达式
查看>>
linux第1天 fork exec 守护进程
查看>>
Ajax原理学习
查看>>
最新最潮的24段魔尺立体几何玩法(2016版)
查看>>
C# 3.0 LINQ的准备工作
查看>>
CodeForces - 449D Jzzhu and Numbers
查看>>
mysql批量插入更新操作
查看>>
静态代码审查工具FxCop插件开发(c#)
查看>>
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>