java使用 aspose-words 导出 word 文档

401 阅读1分钟

aspose-words

aspose-words 相比于 poi-tl 导出上手难度稍微大一些,最主要是官方文档是英文,如果不能流利的阅读英文文档的话,通过机器翻译有些内容没办法正确理解。
下面是通过 aspose-words 导出 word 文档的一个小 demo

aspose-words Demo

首先需要引入对应的 jar 包,这里使用到的是 20.7 的版本,这个 jar 包的下载过程会很慢,如果是国内镜像的话有些仓库是没有的。
通过 maven 引入 jar 包。

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>20.7</version>
</dependency>

引入 jar 包之后就可以开始开发了,这里的话 aspose-words 提供了几种模板导出的方式:
1、通过把数据封装到对应的对象中进行导出
2、通过把数据转换成 json 字符串的形式导出一个 json 文件,然后把 json 文件里面的信息替换 word 模板中的占位符。

这里的 demo 就使用第二种,占位符的数据封装成对应的 json 对象,然后导出成 json 文件最后再进行导出操作。
代码实现如下:

final String TEMPLATE_FILE_PROJECT_EASY_NAME = "projectEasy.docx";
String templateFile = FileUtil.getProjectAbsolutePath(ExportDocFileProperties.RESOURCES_HEAD.concat(TEMPLATE_FILE_PROJECT_EASY_NAME));
Document document = new Document(templateFile);
ReportingEngine engine = new ReportingEngine();
ProjectInfo projectInfo = new ProjectInfo();
projectInfo.setProjectName("测试项目");
//        JsonDataSource  jsonObject = JSONObject.toJSONString(projectInfo);
Object dataSet = projectInfo;
engine.buildReport(document, dataSet);
document.save(FileUtil.getProjectAbsolutePath(ExportDocFileProperties.URL_REPORT.concat(TEMPLATE_FILE_PROJECT_EASY_NAME)));
String jsonFile = FileUtil.getProjectAbsolutePath(ExportDocFileProperties.RESOURCES_HEAD.concat("test.json"));
Document doc = new Document(templateFile);              // Loading a template document.
JsonDataSource dataSource = new JsonDataSource(jsonFile); // Loading JSON.
ReportingEngine engine = new ReportingEngine();
engine.buildReport(doc, dataSource);
doc.save(FileUtil.getProjectAbsolutePath(ExportDocFileProperties.URL_REPORT.concat(TEMPLATE_FILE_PROJECT_EASY_NAME)));

word 的模板信息如下:

image.png

然后最终显示的效果就是 “测试项目” 替换掉了文档中 {{ projectInfo.getProjectName() }} 这部分内容,但是特别需要注意的是 ProjectInfo 对象中的 ProjectName 属性必须是 public 的,如果是 private 的话就不能直接通过 .projectName 进行获取,而是要改为 .getProjectName() 这样的方式来获取,获取的方式和 Java 内相似。