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的转换相关推荐

  1. pdf怎么转换成TXT格式?分享这3个方法!

    当我们需要从PDF文件中提取文本时,尤其是在收集资料撰写文章或其他文件时,PDF文件的特性可能会造成一些麻烦.PDF文件的版面内容不会受浏览设备的影响,保持着统一的版式,但同时也不易于编辑和修改.因此 ...

  2. 如何利用PDF格式转换器在手机上完成PDF格式转换

    如何利用PDF格式转换器在手机上完成PDF格式转换?在我们处理工作文件的过程中,经常会遇到一个问题就是文件格式的处理,比如PDF转换Word.PDF转换Excel等.所以今天小编要为大家带来一个PDF ...

  3. 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片

    项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...

  4. 在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法)

    在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法) 前言 效果展示 正文 docx文件模板创 ...

  5. asp.net pdf如何转换成tif_如何将pdf转换成高清图片?你需要这个软件!|电脑|pdf|转换器...

    如今在办公中很多人都喜欢将图片保存为PDF格式,因为PDF格式更便捷.但如果想在PDF文件中选取其中一些图片出来,那么应该如何操作呢?小编在这里给大家分享两个PDF转图片的方法,轻松帮助你解决格式转换 ...

  6. 不支持所上传的文件格式。请确认选择的文件无误。_职场人必备!如何把PDF文件转换成word文档?...

    点击箭头处"蓝色字",关注我们哦!! 再撑一下!明天就是周末了! PDF大家都用过,它是平时我们办公中最常用到的文件格式之一.它是一种可移植文档格式,与操作系统平台无关,在任何系统 ...

  7. PDF格式转换WPS格式如何实现

    有没有是第一次接触到PDF文件时候发现打开文件是无法点击进行操作的,因为PDF格式文件是无法进行编辑的.但是如果将PDF文件转换成常用的WPS文件就OK了.想要将PDF格式转换WPS格式该如何实现呢? ...

  8. python pdf报告_利用python设计PDF报告,jinja2,whtmltopdf,matplotlib,pandas

    转自:https://foofish.net/python-crawler-html2pdf.html 工具准备 弄清楚了网站的基本结构后就可以开始准备爬虫所依赖的工具包了.requests.beau ...

  9. pdf如何转换成ppt?

    现在的办公一族总感觉有学不完的技术,做不完的文件,每天都忙忙碌碌紧紧张张,但还是有那么多做不完的工作,也没有办法摆脱这样的循环.其实我认为在工作的过程中,有很多环节都是可以不断的进行优化改进,从而提升 ...

最新文章

  1. Javascript中最常用的61段经典代码
  2. “向前进,向钱进”上:自媒体的流量变现路
  3. 排队两小时买墨茉、虎头局,但别指望年轻人“味蕾忠诚”
  4. 哈罗单车怎么关锁还车_街头现新版哈罗单车,细数6大变化,你觉得怎么样?...
  5. Windows、Linux系统安装JDK配置Java环境变量
  6. css实现鼠标覆盖显示大图
  7. Python 基础,不看会后悔哦!
  8. android 常用短语的添加,操作方法:使用Android上的百度输入法提供的导入词库和个性化短语,批量创建单词便于输入...
  9. 特斯拉:感谢A股股民!
  10. spark union 会引起shuffle吗_脑鸣不是耳鸣 会引起听力下降吗?
  11. MATLAB 拟合曲线
  12. 测试鼠标宏软件,Mini Mouse Macro(鼠标宏设置工具)
  13. 前端实习面试经验汇总
  14. 【7】OPencv骨架细化算法
  15. 回顾12306 成长的烦恼
  16. 【无标题】口算小程序
  17. Ubuntu 20.04使用deepin wine安装Windows官方版QQ、微信、Tim等
  18. N-BEATS NEURAL BASIS EXPANSION ANALYSIS FOR INTERPRETABLE TIME SERIES FORECASTING
  19. 自然语言处理--文档集数据处理 gensim corpora.Dictionary
  20. KZ笔记2:视角控制

热门文章

  1. 数据结构——舞伴问题
  2. EasyUIdatetimebox使用
  3. 语音识别的基础知识与CMUsphinx介绍
  4. 系统管理员设置了系统策略禁止进行此安装怎么办
  5. 如何查看苹果的UDID或者UUID
  6. Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions
  7. FreeRTOS——优先级翻转
  8. PEID Autism专版绿色版
  9. c语言查看文件详细信息
  10. Yahoo 日本 api