首页 >> 大全

利用freemark进行pdf的转换

2023-06-20 大全 50 作者:考证青年

1. 对pom文件进行引入

org.springframework.bootspring-boot-starter-freemarker

org.xhtmlrendererflying-saucer-pdf9.0.9

org.springframeworkspring-testRELEASE

2. 转换的流程思路

(1) 读取静态文件模板,将数据进行动态显示

(2)利用模板生成器将ftl模板生成html静态文件

(3)将静态文件转化为流的方式,利用pdf模板将流转化为pdf文件

坑点:pdf模板默认中文不显示,需要引入外界字体,静态文件一般读取到的是中,文件读取不到,建议采用绝对路径的方式,将路径配置到.yml中

(4)可以将pdf文件转化为流,上传到文件系统

3. 方法代码(后台代码)

@Override
public R 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 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 pdfFile = remoteFileUploadService.upload(file);log.info("套红结束。。。。。。。。。。");return pdfFile;
}

4. 前台代码



正文套红

style="font-family: SimHei;">
三门峡社会管理职业学院
文件
${oaOfficialDocument.docText}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了