原文:https://www.cnblogs.com/chengmuyu/p/9081770.html
公司最近做一个交易所项目,里面涉及一个需求就是将html模板,在填充数据后转换为pdf,这样防止数据更改,下面是具体实现
1 pom文件
按 Ctrl+C 复制代码
按 Ctrl+C 复制代码
2 html转pdf
itext7进行html转换使用类:com.itextpdf.html2pdf.HtmlConverter 它主要有三类操作:convertToPdf直接转换为pdf文件 convertToDocument转为document文档,这样有利于进行pdf页面调整 convertToElements拆解pdf标签 我这里因为html转换后会有多页,这里通过convertToDocument调整页面大小,在一页上显示所有内容; 同时我使用ByteArrayOutputStream类,这个的好处是不在本地生成文件,减少磁盘操作,但是这种方式也有人说效率不高,使用者可以斟酌后使用. 因为spring boot存在打包后resources目录文件获取不到的问题,所以我将pdf依赖的字体文件放到项目的根路径下(跟src目录同级).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|
3 流响应
核心是通过ByteArrayOutputStream.writeTo(HttpServletResponse.getOutputStream())方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
备注:
itext7解决中文显示问题有两种解决方式:
1 2 3 4 |
|
使用示例链接: https://github.com/liulei3/html2pdf
参考文件:
html转pdf: https://developers.itextpdf.com/content/itext-7-examples/itext-7-converting-html-pdf
流响应:https://developers.itextpdf.com/content/best-itext-questions-stackoverview/general-questions-about-itext/itext7-how-can-i-serve-pdf-browser-without-storing-file-server-side