最近在测试通过word模板生成简历功能,搜了很多方法都是通过书签方式,要先移动到书签位置然后再进行操作,主要是书签添加起来特别麻烦。而且使用wps还添加的老是出问题。所以找了一个替换的方式。具体操作如下:

首先在word中设置好样式,然后对字符串进行替换就好了。

使用到的jar包

        <!--aspose操作word--><dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>14.7.0</version></dependency><!--糊涂工具--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.15</version></dependency>
package com.register.common.wps;import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.aspose.words.*;
import com.register.common.utils.OSSUtils;
import org.apache.commons.lang3.StringUtils;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Map;
import java.util.regex.Pattern;import static com.register.common.utils.DateUtil.formatDate;/*** description: WordUtils word工具类<br>** @date: 2021/8/6 0006 上午 10:57 <br>* @author: William <br>* version: 1.0 <br>*/
public class WordUtils {/*** aspose操作证书*/private static InputStream license;/*** Linux系统分隔符*/private static final String SYSTEM_SEPARATOR = "/";/*** 文本类型*/public static final int TEXT= 1;/*** HTML类型*/public static final int HTML = 2;/*** 图片类型*/public static final int PICTURE = 3;/*** description: getLicense 获取操作证书<br>* version: 1.0 <br>* @date: 2021/8/6 0006 上午 11:00 <br>* @author: William <br>* @param* @return boolean*/public static boolean getLicense() {boolean result = false;try {license = WordUtils.class.getClassLoader().getResourceAsStream("license.xml");License aLicense = new License();aLicense.setLicense(license);result = true;} catch (Exception e) {e.printStackTrace();}return result;}/*** description: getDocumentTemp 获取模板路径<br>* version: 1.0 <br>* @date: 2021/8/6 0006 下午 12:59 <br>* @author: William <br>* @param* @return com.aspose.words.Document*/private static Document getDocumentTemp() throws Exception {InputStream inputStream = null;Document document = null;try{inputStream = WordUtils.class.getClassLoader().getResourceAsStream("examBookTemp.docx");if(inputStream != null){document = new Document(inputStream);}} catch(Exception e){e.printStackTrace();}finally{if(inputStream != null){inputStream.close();}}return document;}/***处理下载中文乱码* @param request   请求* @param fileName  文件名称* @return:* @author: William* @date 2019/9/12 9:56*/public static String setEncoding(HttpServletRequest request, String fileName) {String userAgent = request.getHeader("User-Agent").toUpperCase();try{if(StringUtils.contains(userAgent, "MSIE")|| userAgent.contains("LIKE GECKO")){//IE浏览器fileName = URLEncoder.encode(fileName,"UTF-8");}else if(StringUtils.contains(userAgent, "MOZILLA")){//google,火狐浏览器fileName = new String(fileName.getBytes(), "ISO8859-1");}else{//其他浏览器fileName = URLEncoder.encode(fileName,"UTF8");}}catch (Exception e){e.printStackTrace();}return fileName;}/*** description: preGeneWord 生成word准备工作,获取License以及获取系统字体<br>* version: 1.0 <br>* @date: 2021/4/15 0015 下午 1:27 <br>* @author: William <br>*/private static void preGeneWord() {if (!getLicense()) {System.out.println("获取验证失败");}if(SYSTEM_SEPARATOR.equals(File.separator)){FontSettings.setFontsFolder("/usr/share/fonts/font", true);}}/*** description: 替换图片方法 <br>* version: 1.0 <br>* @date: 2021/4/15 0015 下午 2:45 <br>* @author: William <br>*/public static class ReplaceAndInsertImage implements IReplacingCallback{public String url;public ReplaceAndInsertImage(String url){this.url = url;}@Overridepublic int replacing(ReplacingArgs e) throws Exception {//获取当前节点Node node = e.getMatchNode();//获取当前文档Document doc = (Document) node.getDocument();DocumentBuilder builder = new DocumentBuilder(doc);//将光标移动到指定节点builder.moveTo(node);//插入图片Shape shape = new Shape(doc, ShapeType.IMAGE);shape.getImageData().setImage(url);shape.setHeight(100);shape.setWidth(80);shape.setDistanceTop(10);shape.setHorizontalAlignment(HorizontalAlignment.CENTER);shape.setVerticalAlignment(VerticalAlignment.CENTER);builder.insertNode(shape);return ReplaceAction.REPLACE;}}/*** description: 替换文本为html方法 <br>* version: 1.0 <br>* @date: 2021/4/15 0015 下午 2:45 <br>* @author: William <br>*/public static class ReplaceAndInsertHtml implements IReplacingCallback{public String html;public ReplaceAndInsertHtml(String html){this.html = html;}@Overridepublic int replacing(ReplacingArgs e) throws Exception {//获取当前节点Node node = e.getMatchNode();//获取当前文档Document doc = (Document) node.getDocument();DocumentBuilder builder = new DocumentBuilder(doc);//将光标移动到指定节点builder.moveTo(node);//插入图片builder.insertHtml(html,true);return ReplaceAction.REPLACE;}}/*** description: documentWrite  <br>* version: 1.0 <br>* @date: 2021/8/6 0006 下午 1:35 <br>* @author: William <br>* @param document        word文档* @param replaceFiled    需要替换的字符* @param content         替换内容* @param replaceType     替换类型 1是字符串 2是HTML 3是图片* @return void*/private static void documentWrite(Document document,String replaceFiled,String content,Integer replaceType) {try {if(TEXT == replaceType){//文本类型document.getRange().replace(replaceFiled,content,true,true);} else if(HTML == replaceType){Pattern pattern = Pattern.compile(replaceFiled);document.getRange().replace(pattern,new ReplaceAndInsertHtml(content),false);} else if(PICTURE == replaceType){if(StringUtils.isEmpty(content)){document.getRange().replace(replaceFiled,"暂无",true,true);}else{Pattern pattern = Pattern.compile(replaceFiled);document.getRange().replace(pattern,new ReplaceAndInsertImage(content),false);}}} catch (Exception e) {e.printStackTrace();}}/*** description: geneExamBook <br>* version: 1.0 <br>* @date: 2021/8/6 0006 下午 7:04 <br>* @author: William <br>* @param examBook   准考证书信息* @return java.lang.String*/public static String geneExamBook(ExamBookVo examBook) throws Exception {String fileName = getFileName();FileOutputStream outputStream = new FileOutputStream(fileName);//操作word之前的预处理preGeneWord();Document document = getDocumentTemp();writeExamBook(document,examBook);//注意SaveFormat的格式要与上面生成格式保持一致document.save(outputStream, SaveFormat.PDF);outputStream.flush();outputStream.close();FileInputStream inputStream = new FileInputStream(fileName);String path = OSSUtils.picFolder + "/shareCodePdf/" + formatDate(new Date(), "yyyyMMdd");String pdfUrl = OSSUtils.uploadObject2OSSByStream(inputStream, path, "aaa.pdf");FileUtil.del(fileName);return pdfUrl;}/*** description: getFileName 获取文件名称<br>* version: 1.0 <br>* @date: 2021/8/6 0006 下午 6:49 <br>* @author: William <br>* @param* @return java.lang.String*/private static String getFileName() {String fileName = "";if(File.separator.equals("/")){fileName = "/home/apps/register/pdf/";}else{fileName = "D:\\apps\\register\\pdf\\";}File target = new File(fileName);if(!target.exists()){target.mkdirs();}fileName = fileName+IdUtil.fastUUID()+".pdf";return fileName;}/*** description: writeExamBook 向简历中填写内容<br>* version: 1.0 <br>* @date: 2021/8/6 0006 下午 2:46 <br>* @author: William <br>* @param document   word文档操作流* @param examBook   需要替换的对象实体* @return void*/private static void writeExamBook(Document document, ExamBookVo examBook) {Map<String, Object> map = BeanUtil.beanToMap(examBook);for (Map.Entry<String, Object> stringObjectEntry : map.entrySet()) {documentWrite(document,stringObjectEntry.getKey(),stringObjectEntry.getValue().toString(),TEXT);}}public static void main(String[] args) throws Exception {ExamBookVo examBookVo = new ExamBookVo();examBookVo.setExamNo("202010110198");examBookVo.setUserName("金XX");examBookVo.setIdCard("310114199XXXXXXXX");examBookVo.setPeriod("小学");examBookVo.setSubjectName("语文");examBookVo.setExamRoom("笔试第 07 考场(204)");examBookVo.setExamDate("2020 年 10 月 11 日(星期日)");examBookVo.setExamTime("9:00");String examBook = geneExamBook(examBookVo);}}

下面是我生成准考证的方法,简历的好像不小心被删除了。其实很简单。如果有什么看不明白的地方可以微信交流。

如果需要jar包的可以添加微信我发给你。

Java使用aspose生成简历相关推荐

  1. Java使用freemarker生成word文档并转pdf文档

    Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...

  2. Java使用itext生成Pdf

    Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...

  3. Java短连接生成工具-思路

    Java短连接生成工具-思路-这里只是模拟一下 package com.csrs.trans.shorturl;import java.util.HashMap; import java.util.M ...

  4. java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码

    CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...

  5. gen文件下有两个R.java_gen目录无法更新,或者gen目录下的R.JAVA文件无法生成

    gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自 ...

  6. Java根据正则生成随机字符串

    regex="^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$" 调研了下,目前有5种开源工具: ①import ...

  7. java对象实例_深入理解Java对象实例生成的例子!(转)

    深入理解Java对象实例生成的例子!(转)[@more@]代码如下: class A { public int Avar; public A() { System.out.println(" ...

  8. java图形验证码生成工具类

    转载自   java图形验证码生成工具类 生成验证码效果       ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...

  9. java代码自动生成的插件_如何使用插件生成自定义Java 8代码

    java代码自动生成的插件 大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序 ...

最新文章

  1. PostgreSQL in 与 = any 的SQL语法异同与性能优化
  2. 学习日志-中缀表达式转后缀表达式并计算结果
  3. 任务管理平台_软件品质评测系统任务分发管理平台
  4. Makefile系列学习(博客)
  5. 第一款Micropython图形化编辑器—Python Editor
  6. mysql 主主+keepalive
  7. 简化版XP按装IIS5.1实录
  8. Android 矢量图动画(完结篇)
  9. 微信数据解密-dat查看
  10. 看单片机原理图-电源电路
  11. 00002 用一元钱兑换一分两分五分的硬币,一分两分五分每种至少一枚,共有多少种组合方式,编程实现
  12. 【安卓Framework学习】Wifi框架学习之热点评分机制
  13. EXCEL表格-数据验证报错弹窗制作
  14. ardupilot 加速度计六面校准
  15. 总结一下购买阿里云服务器的经验
  16. 友华光猫设置虚拟服务器,中兴光猫sendcmd常用命令
  17. Temu跨境电商,自养国外买家账号补单?快速出单,掌握流量密码
  18. 【Axure视频教程】锚链接菜单
  19. 3ds Max 2016怎样设置中文界面?
  20. 【python 走进NLP】simhash 算法计算两篇文章相似度

热门文章

  1. 3D建模zbrush笔刷分享
  2. 提供在Linux上运行最新版腾讯QQ与TIM的解决方案 Easiest Way to Run QQTIM on Linux
  3. 芯片验证漫游指南_IC验证入门资料
  4. 局域网内共享打印机的几种方式
  5. 软件缺陷报告模板(微信缺陷报告案例)
  6. 六款视频剪辑神器,做影视剪辑短视频事半功倍,15天有3000
  7. ios appstore 审核 Guideline 5.2.2 - Legal ios新闻资讯类APP5.2.2被拒
  8. 小程序下载图片、文件、wx.downloadFile,废话少说直接上代码
  9. OSI七层模型和STP/IP协议模型(生动形象,简单易懂)
  10. ROS2 Humble测试版功能包列表