利用freemark进行pdf的转换
1. 对pom文件进行引入
<!--freemarker模板 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!--pdf生成器 --> <dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>9.0.9</version> </dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>RELEASE</version> </dependency>
2. 转换的流程思路
(1) 读取静态文件模板,将数据进行动态显示
(2)利用freemark模板生成器将ftl模板生成html静态文件
(3)将静态文件转化为流的方式,利用pdf模板将流转化为pdf文件
坑点:pdf模板默认中文不显示,需要引入外界字体,静态文件一般读取到的是target中,文件读取不到,建议采用绝对路径的方式,将路径配置到application.yml中
(4)可以将pdf文件转化为流,上传到文件系统
3. 方法代码(后台代码)
@Override public R<FileVO> getRedSet(Integer id) {log.info("开始进行套红。。。。。。。。。。。");//获取模板对象Template template = null;try {//获取自定义的模板对象template = freemarkerConfig.getTemplate("redset.ftl");} catch (IOException e) {e.printStackTrace();}//通过id查找公文信息OaOfficialDocument oaOfficialDocument = oaOfficialDocumentService.getById(id);//存放页面输出的参数Map<String, OaOfficialDocument> param = new HashMap();//用于页面绑定参数param.put("oaOfficialDocument", oaOfficialDocument);//获取html转化为pdf对象ITextRenderer renderer = new ITextRenderer();try {//在配置文件中存放字体信息用于读取配置文件的路径String filePath = applicationContext.getEnvironment().getProperty("zhxy.fontfile");//在模板中添加字体信息,默认模板的非字体不显示中文renderer.getFontResolver().addFont(filePath, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}try (StringWriter writer = new StringWriter();) {//将html模板转化为流信息template.process(param, writer);writer.flush();//将html流信息写入到pdf中renderer.setDocumentFromString(writer.toString());} catch (TemplateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}renderer.layout();//用来定义一个存储pdf的流信息byte[] fileBytes = null;try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();) {//将创建的pdf文件的流信息,写入到定义的流中renderer.createPDF(byteArrayOutputStream);fileBytes = byteArrayOutputStream.toByteArray();} catch (DocumentException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}MultipartFile file = null;//将byte数组转化为写入流try (InputStream inputStream = new ByteArrayInputStream(fileBytes);) {//将写入流转化为MockMultipartFile对象file = new MockMultipartFile("file", "file.pdf", ContentType.APPLICATION_OCTET_STREAM.toString(), inputStream);} catch (IOException e) {e.printStackTrace();}//调用远程的fegin接口将文件上传到minIo中R<FileVO> pdfFile = remoteFileUploadService.upload(file);log.info("套红结束。。。。。。。。。。");return pdfFile; }
4. 前台代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>正文套红</title><meta http-equiv="content-type" content="text/html;charset=utf-8"/><style type="text/css">*{margin: 0;padding: 0;}.box{width: 100%;background: #fff;margin: 0 auto;}.box .line{width: 100%;height: 5px;background-color: #e60012;margin-top: 40px;}.box .title{width: 100%;position: relative;padding-left: 50px;box-sizing: border-box;}.box .title .names{font-size: 45px;float: left;}.box .title .names div{color: #e60012;}.box .title .names div:first-child{margin-bottom: 32px;}.box .title .names span{display: inline-block;width: 30px;}.box .title .word{font-size: 45px;writing-mode:horizontal-tb;line-height: 108px;color: #e60012;float: right;padding-right: 80px;}.parent{width: 100%;height: 120px;}.main{padding: 15px 10px;}</style> </head>
<!--指定引入的字体类型 -->
<body style="font-family: SimHei;">
<div class="box"><div class="title"><div class="parent"><div class="names"><div>三门峡社会管理职业学院</div><div>三<span></span>门<span></span>峡<span></span>技<span></span>师<span></span>学<span></span>院</div></div><div class="word">文件</div></div></div><div class="line"></div><div class="main">${oaOfficialDocument.docText}</div>
</div>
</body>
</html>
利用freemark进行pdf的转换相关推荐
- pdf怎么转换成TXT格式?分享这3个方法!
当我们需要从PDF文件中提取文本时,尤其是在收集资料撰写文章或其他文件时,PDF文件的特性可能会造成一些麻烦.PDF文件的版面内容不会受浏览设备的影响,保持着统一的版式,但同时也不易于编辑和修改.因此 ...
- 如何利用PDF格式转换器在手机上完成PDF格式转换
如何利用PDF格式转换器在手机上完成PDF格式转换?在我们处理工作文件的过程中,经常会遇到一个问题就是文件格式的处理,比如PDF转换Word.PDF转换Excel等.所以今天小编要为大家带来一个PDF ...
- 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片
项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...
- 在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法)
在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法) 前言 效果展示 正文 docx文件模板创 ...
- asp.net pdf如何转换成tif_如何将pdf转换成高清图片?你需要这个软件!|电脑|pdf|转换器...
如今在办公中很多人都喜欢将图片保存为PDF格式,因为PDF格式更便捷.但如果想在PDF文件中选取其中一些图片出来,那么应该如何操作呢?小编在这里给大家分享两个PDF转图片的方法,轻松帮助你解决格式转换 ...
- 不支持所上传的文件格式。请确认选择的文件无误。_职场人必备!如何把PDF文件转换成word文档?...
点击箭头处"蓝色字",关注我们哦!! 再撑一下!明天就是周末了! PDF大家都用过,它是平时我们办公中最常用到的文件格式之一.它是一种可移植文档格式,与操作系统平台无关,在任何系统 ...
- PDF格式转换WPS格式如何实现
有没有是第一次接触到PDF文件时候发现打开文件是无法点击进行操作的,因为PDF格式文件是无法进行编辑的.但是如果将PDF文件转换成常用的WPS文件就OK了.想要将PDF格式转换WPS格式该如何实现呢? ...
- python pdf报告_利用python设计PDF报告,jinja2,whtmltopdf,matplotlib,pandas
转自:https://foofish.net/python-crawler-html2pdf.html 工具准备 弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了.requests.beau ...
- pdf如何转换成ppt?
现在的办公一族总感觉有学不完的技术,做不完的文件,每天都忙忙碌碌紧紧张张,但还是有那么多做不完的工作,也没有办法摆脱这样的循环.其实我认为在工作的过程中,有很多环节都是可以不断的进行优化改进,从而提升 ...
最新文章
- Javascript中最常用的61段经典代码
- “向前进,向钱进”上:自媒体的流量变现路
- 排队两小时买墨茉、虎头局,但别指望年轻人“味蕾忠诚”
- 哈罗单车怎么关锁还车_街头现新版哈罗单车,细数6大变化,你觉得怎么样?...
- Windows、Linux系统安装JDK配置Java环境变量
- css实现鼠标覆盖显示大图
- Python 基础,不看会后悔哦!
- android 常用短语的添加,操作方法:使用Android上的百度输入法提供的导入词库和个性化短语,批量创建单词便于输入...
- 特斯拉:感谢A股股民!
- spark union 会引起shuffle吗_脑鸣不是耳鸣 会引起听力下降吗?
- MATLAB 拟合曲线
- 测试鼠标宏软件,Mini Mouse Macro(鼠标宏设置工具)
- 前端实习面试经验汇总
- 【7】OPencv骨架细化算法
- 回顾12306 成长的烦恼
- 【无标题】口算小程序
- Ubuntu 20.04使用deepin wine安装Windows官方版QQ、微信、Tim等
- N-BEATS NEURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING
- 自然语言处理--文档集数据处理 gensim corpora.Dictionary
- KZ笔记2:视角控制