java使用Aspose向word模板写入数据

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

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

<dependency>
   <groupId>com.mlsc</groupId>
   <artifactId>aspose-cells</artifactId>
   <version>8.3.1</version>
</dependency>

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内容如下:

<License>
  <Data>
    <Products>
      <Product>Aspose.Total for Java</Product>
      <Product>Aspose.Words for Java</Product>
    </Products>
    <EditionType>Enterprise</EditionType>
    <SubscriptionExpiry>20991231</SubscriptionExpiry>
    <LicenseExpiry>20991231</LicenseExpiry>
    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>
  </Data>
  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>

(3)获取文档对象
  Document doc = new Document(templateFilePath);

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

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

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

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

List<Staff> 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, 5, 0, 0);
builder.getCellFormat().setVerticalMerge(CellMerge.FIRST);

for(int i = 1; i < staffList.size() + 1; i++ ) {
      builder.moveToCell(0, 5 + 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);

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

 

原文地址:https://www.cnblogs.com/super-yu/p/10395338.html

时间: 2024-10-31 02:34:25

java使用Aspose向word模板写入数据的相关文章

java poi 从服务器下载模板写入数据再导出

最近写了一个,Excel 的 写入和导出.   需求是这样的.   在新建合同的时候,会有导出合同的数据,    导出的模板是固定的,,需要在模板里面写入合同的信息. first   :  下载模板   > 写入数据 > 输出 下载模板  : StringBuilder path = new StringBuilder(""); path.append(request.getSession().getServletContext().getRealPath("&q

使用java Apache poi 根据word模板生成word报表

项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一些复杂的表格做不了,但是已经基本满足项目需求了. 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https://download.csdn.net/download/u012775558/10306308 注意,仅支持docx

java io流 创建文件、写入数据、设置输出位置

java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ /** * 存储为二进制,给计算机看的 */ //创建文件 DataOutputStream sjl = new DataOutputStrea

依据word模板批量生成试卷

java-word-MassProduction 目录 使用方法 开发流程 一.使用方法 1.制造题库所需Word模板 需要填充数据的地方使用 ${pid} 代替. 将这个word选择另存为,保存格式选择为xml,然后将这个xml放到项目的ftl目录下,后缀名改为.ftl . 2.配置数据库 项目中使用了hibernate,表结构可以自动生成,但前提得先有mysql数据库环境且创建好数据库,数据库连接信息可以在hibernate.hbm.xml中修改. 对应上面模板实例中的${pid}值,在对应

java中将list、map对象写入文件

链接地址:http://blog.sina.com.cn/s/blog_4a4f9fb50101p6jv.html 推荐:凤爪女瓜子男怪象该谁反思伦敦房价为什么持续暴涨 × wvqusrtg个人中心发博文消息 doudouhe的博客 http://blog.sina.com.cn/dechuan608hewei [订阅][手机订阅] 首页博文目录图片关于我 个人资料 doudouhe 微博 加好友发纸条 写留言加关注 博客等级: 博客积分:842 博客访问:222,144 关注人气:34 获赠金

java实现赋值excel模板,并在新文件中写入数据,并且下载

/** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new File("d:/ss.xls"); //新文件写入数据,并下载***************************************************** InputStream is = null; HSSFWorkbook workbook = null; HSSFSh

向Word模板中填充数据

现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指定数据填写到指定位置即可. 1. 制作Word模板, 在Word中,有一个东东叫书签,我们可以在需要填充的地方预先插入特定名称的书签. 2. 在指定的Bookmark位置写入特定数据: MSWord.Application app = new MSWord.Application(); string

C# 读取Excel文件,并写入word模板文档

1.该程序是一个win32控制台程序 2.开发工具是VS2010,office是2013版的 3.需要添加以下引用 4 在C盘保存.dot模板,样式如下 6.excel中的数据格式,最好都设置为常规. 具体的代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using

Aspose Word模板使用总结

Aspose Word模板使用总结 1.创建word模版,使用MergeFeild绑定数据 新建一个Word文档,命名为Template.doc 注意:这里并不是输入"<”和“>”就可以了,而是必须在菜单的"插入→文档部件→域”找到MergeField并输入相应的域名 2.使用数组提供数据源 string tempPath = Server.MapPath("~/Docs/Temp/Template.doc"); string outputPath =