一、java生成word文档

java生成word文档常用的两种方式:

(1)apache下的poi类库处理office文档

(2)freemarker编辑word文件转换的xml文件

通过网上了解,第(1)种方式使用poi操作数据相对麻烦些,对于word07兼容些好些,第(2)种方式使用freemarker的标签处理数据极为方便,生成doc格式文件不会有兼容问题,但是生成docx文件会有兼容性问题,office07以上版本不能直接打开(wps不受影响),不过可以通过程序进行另存为高版本即可解决

下面使用freemarker生成word文件:

导入依赖包:

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version>
</dependency>

1.将需要生成word文件另外为xml格式(word XML或word 2003 XML都可以),用文本管理器打开会发现xml标签内容的文件啦,可以在里面写freemarker标签了

2.将xml后缀名改成ftl后缀

3.使用freemarker对ftl文件进行渲染

import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.*;/*** 创建word文件* @param clazz* @param path 模板文件所在路径* @param template 模板文件名* @param newWordName 生成的文件名* @param dataMap 渲染数据*/
public static void generateWord(Class clazz, String path,String template, String newWordName,Map<String, Object> dataMap) {try {Configuration configuration = new Configuration();configuration.setDefaultEncoding("utf-8");configuration.setClassForTemplateLoading(clazz,path);Template temp = null;//加载模板文件temp = configuration.getTemplate(template,"utf-8");File outFile = null;Writer out = null;String filename = newWordName;outFile = new File(newWordName);out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));//渲染数据temp.process(dataMap, out);out.flush();out.close();} catch (Exception e) {e.printStackTrace();}
}

4.渲染后的文件后缀名存为doc,若存为docx,office03以上版本,打开会出错,需要java模拟另存为高版本文件可以解决

二、java word转pdf

doc转pdf最常见的有一下几种方式

(1)使用com.documents4j

(2)使用 com.aspose.words

(3)使用poi、itext

(4)使用openoffice

第(1)种:优点:转换简单,windows环境下几行代码即可实现完美转换,缺点:Linux下需要安装ms-office插件(插件据说官方未提供),否则会出现转换失败。windows服务器环境下有兴趣朋友可以尝试下

见:https://blog.csdn.net/lihaiyang722/article/details/108405355

第(2)种:优点:转换简单,几行代码即可转换,缺点:aspose包依赖下载会失败,需要从第三方下载后手动放到仓库进行依赖,其次,如果部署到Linux下,环境中必须含有和window环境下的字库相一致,否则会出现乱码。

第(3)(4)操作起来相对麻烦些,见:

https://blog.csdn.net/zhangjunli/article/details/104940663

https://www.cnblogs.com/ph7seven/archive/2018/12/21/10158489.html

所以我这边采用第(2)种方案:

导入依赖,jar包从第三方下载放入maven仓库

<dependency><groupId>com.aspose</groupId><artifactId>aspose-words-jdk16</artifactId><version>15.8.0</version><classifier>jdk16</classifier>
</dependency>

word转pdf实现:

import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import java.io.*;/***word转pdf* @param docPath word文件路径* @param pdfPath pdf文件路径*/
public static void doc2pdf(String docPath,String pdfPath){File pdfFile = new File(pdfPath);try {String s = "<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>";ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());License license = new License();license.setLicense(is);com.aspose.words.Document document = new com.aspose.words.Document(docPath);document.save(new FileOutputStream(pdfFile), SaveFormat.PDF);} catch (Exception e) {logger.info("doc转pdf异常");e.printStackTrace();}
};

linux下乱码字符处理:

https://blog.csdn.net/qq_40102178/article/details/100738793

https://blog.csdn.net/qq_27319683/article/details/103344196

附 上传文件:

/*** 上传文件* @param fileName 文件名* @param uploadUrl 上传文件路径* @return*/
private String uploadFile(String fileName,String uploadUrl){try {logger.info("开始上传文件。。。,文件名:{}上传路径:{}",fileName,uploadUrl);File file = new File(fileName);FileSystemResource resource = new FileSystemResource(file);MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();HttpHeaders headers = new HttpHeaders();MediaType type = MediaType.parseMediaType("multipart/form-data");headers.setContentType(type);param.add("file", resource);HttpEntity<MultiValueMap> formEntity = new HttpEntity<MultiValueMap>(param, headers);String s = restTemplate.postForObject(uploadUrl, formEntity, String.class);logger.info("文件上传成功...,响应数据为:{}",s);file.delete();return s;} catch (Exception e) {logger.info("文件上传异常:"+e.getMessage());e.printStackTrace();}return null;
}

word和pdf生成后上传到文件库,并保存路径,前端就可以通文件地址在线预览pdf啦

java下freemarker2.3.28+aspose实现生成word文档生成、word转pdf转换相关推荐

  1. Word文档生成神器:开源项目poi.tl使用介绍

    导航: Word文档生成神器:开源项目poi-tl使用介绍 一. 概述 1.1 适合的场景 1.2 poi-tl的优势 二. poi-tl实例演示: 2.1 使用poi-tl生成word文档 三. 更 ...

  2. 如何将word文档生成二维码

    最近遇到很多客户咨询如何将word文档生成二维码,如何将视频生成二维码,目前二维码中是无法直接储存word文档,视频一类的,唯一的途径就是先把文档和视频信息上传到网站服务器上,然后在二维码生成器中利用 ...

  3. Java操作word文档将docx转换为pdf格式

    Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...

  4. word文档生成PDF文档时候自动生成书签方法

    0 Preface/Foreword 在日常工作中,经常需要写技术文档,为了排版美观,一般会选择word,这样就可以生成目录. word文件可以很方便生产PDF文档,方便分享给同事. 在阅读PDF文档 ...

  5. word文档生成目录的方法,word生成目录之后怎么修改页码

    word文档生成目录步骤,包括撰写标题.层级化标题.插入空白页.引入目录四个步骤.word文档生成目录后怎么修改页码?自动生成的目录,可通过自动更新页码的方式修改页码,无须手动修改.接下来,以Micr ...

  6. 计算机生成目录步骤word,如何在word文档生成目录

    如何在word文档生成目录 随着科技的进步,电脑越来月成为我们生活中不可缺少的一部分.用电脑制作相应的word文档也是我们日常生活中离不开的工作内容与操作任务.那么,用word制作文档,就要涉及到生成 ...

  7. python之word文档生成

    python之word文档生成 python-docx官方文档 python-docx操作word文档 python文件读取操作 excel文件操作 python-docx官方文档 Document ...

  8. Java版Word开发工具Aspose.Words基础转换指南:将Word文档和图像转换为PDF

    Aspose.Words for Java是功能丰富的文字处理API,开发人员可以在自己的Java应用程序中嵌入生成,修改,转换,呈现和打印Microsoft Word支持的所有格式的功能.它不依赖于 ...

  9. Java根据word模板生成word文档并转成PDF文件

    1. 处理word模板 1.1 定义word模版 1.2 定义完我们的模板之后,我们要将文档保存为xml的格式 定义完我们的模板之后,我们要将文档保存为xml的格式 1.3 xml格式化 生成的xml ...

最新文章

  1. java多线程循环打印abc,使用java多线程顺序打印“ABCABC”
  2. 【Network Security!】Banner信息收集
  3. 【阿里云大学课程】前端必知——HTML5新特性完整视频教程(音频、视频、画布、web存储、动画……)...
  4. setTimeout 和 setInterval
  5. bash 抓捕异常_SHELL异常处理(转载)
  6. 互联网短平快下,DevCloud如何支撑软件开发的“转型”?
  7. 下载速度MB/s与Mb/s的区别
  8. 关于手机常见音频POP音产生的原因以及解决思路(一)——耳机插入与拔出
  9. UITextField 的左视图 --用户名和密码框的标志
  10. 怎么画学计算机的男孩形象,怎么一步一步教大班幼儿画自己的画像:小男孩简笔画(步骤图解)...
  11. 奥升德推出Acteev Protect™抗菌技术
  12. 2021阿里云服务器购买攻略-618年中大促专场
  13. 无人出租赛道洗牌开启?这家公司为什么会黄?
  14. mysql数据库怎么查看端口号_怎么查看数据库端口号(mysql怎么查看端口号)
  15. Pandas--melt和pivot
  16. php软件测试课程资源共享网站
  17. u9系统的使用方法仓库_晋江正版用友u9系统使用方法-好不好用
  18. 2023 华为 Datacom-HCIE 真题题库 02/12--含解析
  19. ShareTechnote系列LTE(6):下行子帧解码(PCFICH、PHICH、PDCCH、PDSCH解码)
  20. 【技术引擎——汇聚IT思想之间的碰撞】

热门文章

  1. 获取bilibili直播弹幕的WebSocket协议
  2. C# 删除指定Windows端口的进程
  3. 谈判技巧——谈判阶段
  4. PHP扩展开发--入门
  5. linux用户锁住了锁多久,linux(ubuntu)用户连续N次输入错误密码进行登陆时自动锁定X分钟...
  6. 华为手机鸿蒙系统照片,华为:鸿蒙系统不是为智能手机设计的
  7. linux系统挂载逻辑卷和扩展逻辑卷组
  8. 振动力学——1.单自由度系统自由振动
  9. InnovMetric PolyWorks Metrology Suite 2021 IR2
  10. redis映射的概念_搭建分布式Redis Cluster集群与Redis入门