Java使用aspose生成简历
最近在测试通过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生成简历相关推荐
- Java使用freemarker生成word文档并转pdf文档
Java使用freemarker生成word文档后转pdf 先来看看效果图 进入正题 项目需求: 为订单后生成对应的pdf文档,文档内包含图片. 方案一:使用freemarker和itext把html ...
- Java使用itext生成Pdf
Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...
- Java短连接生成工具-思路
Java短连接生成工具-思路-这里只是模拟一下 package com.csrs.trans.shorturl;import java.util.HashMap; import java.util.M ...
- java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码
CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...
- gen文件下有两个R.java_gen目录无法更新,或者gen目录下的R.JAVA文件无法生成
gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自 ...
- Java根据正则生成随机字符串
regex="^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$" 调研了下,目前有5种开源工具: ①import ...
- java对象实例_深入理解Java对象实例生成的例子!(转)
深入理解Java对象实例生成的例子!(转)[@more@]代码如下: class A { public int Avar; public A() { System.out.println(" ...
- java图形验证码生成工具类
转载自 java图形验证码生成工具类 生成验证码效果 ValidateCode.java 验证码生成类 package cn.dsna.util.images; import java ...
- java代码自动生成的插件_如何使用插件生成自定义Java 8代码
java代码自动生成的插件 大多数程序员讨厌的一件事就是编写样板代码. 无休止的时间花费在设置实体类和配置数据库连接上. 为了避免这种情况,您可以让Speedment Open Source之类的程序 ...
最新文章
- PostgreSQL in 与 = any 的SQL语法异同与性能优化
- 学习日志-中缀表达式转后缀表达式并计算结果
- 任务管理平台_软件品质评测系统任务分发管理平台
- Makefile系列学习(博客)
- 第一款Micropython图形化编辑器—Python Editor
- mysql 主主+keepalive
- 简化版XP按装IIS5.1实录
- Android 矢量图动画(完结篇)
- 微信数据解密-dat查看
- 看单片机原理图-电源电路
- 00002 用一元钱兑换一分两分五分的硬币,一分两分五分每种至少一枚,共有多少种组合方式,编程实现
- 【安卓Framework学习】Wifi框架学习之热点评分机制
- EXCEL表格-数据验证报错弹窗制作
- ardupilot 加速度计六面校准
- 总结一下购买阿里云服务器的经验
- 友华光猫设置虚拟服务器,中兴光猫sendcmd常用命令
- Temu跨境电商,自养国外买家账号补单?快速出单,掌握流量密码
- 【Axure视频教程】锚链接菜单
- 3ds Max 2016怎样设置中文界面?
- 【python 走进NLP】simhash 算法计算两篇文章相似度
热门文章
- 3D建模zbrush笔刷分享
- 提供在Linux上运行最新版腾讯QQ与TIM的解决方案 Easiest Way to Run QQTIM on Linux
- 芯片验证漫游指南_IC验证入门资料
- 局域网内共享打印机的几种方式
- 软件缺陷报告模板(微信缺陷报告案例)
- 六款视频剪辑神器,做影视剪辑短视频事半功倍,15天有3000
- ios appstore 审核 Guideline 5.2.2 - Legal ios新闻资讯类APP5.2.2被拒
- 小程序下载图片、文件、wx.downloadFile,废话少说直接上代码
- OSI七层模型和STP/IP协议模型(生动形象,简单易懂)
- ROS2 Humble测试版功能包列表