java通过freemarker模板导出pdf
使用itext将html生成pdf中文换行问题解决方案
- <!-- freemarker -->
- <dependency>
- <groupId>org.freemarker</groupId>
- <artifactId>freemarker</artifactId>
- <version>2.3.19</version>
- </dependency>
- <!-- itextpdf,导出pdf核心架包 -->
- <dependency>
- <groupId>com.itextpdf</groupId>
- <artifactId>itextpdf</artifactId>
- <version>5.5.11</version>
- </dependency>
- <!-- itextpdf工具包,用来解析html生成pdf -->
- <dependency>
- <groupId>com.itextpdf.tool</groupId>
- <artifactId>xmlworker</artifactId>
- <version>5.5.11</version>
- </dependency>
- <!-- flying saucer,支持对CSS高级特性的解析 -->
- <dependency>
- <groupId>org.xhtmlrenderer</groupId>
- <artifactId>flying-saucer-pdf</artifactId>
- <version>9.1.5</version>
- </dependency>
- <dependency>
- <groupId>org.xhtmlrenderer</groupId>
- <artifactId>flying-saucer-pdf-itext5</artifactId>
- <version>9.1.5</version>
- </dependency>
- // 获设置模板路径,供参考
- static {
- freemarkerCfg =new Configuration();
- //freemarker的模板目录
- freemarkerCfg.setClassForTemplateLoading(JavaToPdfHtmlFreeMarker.class,"/");
- }
- public static String freeMarkerRender(Map<String, Object> data, String htmlTmp) {
- Writer out = new StringWriter();
- try {
- // 获取模板,并设置编码方式
- Template template = freemarkerCfg.getTemplate(htmlTmp);
- template.setEncoding("UTF-8");
- // 合并数据模型与模板
- template.process(data, out); //将合并后的数据和模板写入到流中,这里使用的字符流
- out.flush();
- return out.toString();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- out.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- }
- }
- return null;
- }
- public static void createPdf(String content,OutputStream out) throws IOException, com.lowagie.text.DocumentException {
- ITextRenderer render = new ITextRenderer();
- ITextFontResolver fontResolver = render.getFontResolver();
- fontResolver.addFont("C:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
- // 解析html生成pdf
- render.setDocumentFromString(content);
- //解决图片相对路径的问题
- //render.getSharedContext().setBaseURL("");
- render.layout();
- render.createPDF(out);
- render.finishPDF();
- }
- body{
- font-family:SimSun;
- }
- try{
- OutputStream out = null;
- out = response.getOutputStream();
- //设置响应对象上下文类型
- response.setContentType( "application/pdf,charset=utf-8");
- //文件名处理,防止乱码问题
- fileName += DateTimeUtils.currentDate("yyMMddHHmmss") + ".pdf";
- String filename = "";
- filename = request==null? java.net.URLEncoder.encode(fileName, "UTF-8"): AppUtils.encodingFileName(fileName,request);
- //设置响应头
- response.setHeader("Content-Disposition","attachment;filename=" + filename);
- JavaToPdfHtmlFreeMarker.createPdf(content,out);
- //获取响应对象输出流并返回
- if (out != null) {
- out.close();
- out = null;
- }
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- return super.outJsonStringFail();
- } catch (IOException e) {
- e.printStackTrace();
- return super.outJsonStringFail();
- } catch (com.lowagie.text.DocumentException e) {
- e.printStackTrace();
- return super.outJsonStringFail();
- }
4.如有echarts图,可添加一下js,将图转为base64码放于css或者html中的style属性中
- /**
- * 将多个canvas画布组成的图表合成为一个完整的canvas,并获取完整的dataURl
- * @param divId divId 包含整个画布的divId
- * @returns {String} widthXheight@dataURL 例:
- * 400X300@data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA
- */
- function getFullCanvasDataURL(divId){
- //将第一个画布作为基准。
- var baseCanvas = $("#"+divId).find("canvas").first()[0];
- if(!baseCanvas){
- return false;
- };
- var width = baseCanvas.width;
- var height = baseCanvas.height;
- var ctx = baseCanvas.getContext("2d");
- //遍历,将后续的画布添加到在第一个上
- $("#"+divId).find("canvas").each(function(i,canvasObj){
- if(i>0){
- var canvasTmp = $(canvasObj)[0];
- ctx.drawImage(canvasTmp,0,0,width,height);
- }
- });
- //获取base64位的url
- return baseCanvas.toDataURL();
- }
java通过freemarker模板导出pdf的更多相关文章
- java使用freemarker模板导出word(带有合并单元格)文档
来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...
- java根据模板导出PDF(利用itext)
一.制作模板 1.下载Adobe Acrobat 9 Pro软件(pdf编辑器),制作模板必须使用该工具. 2.下载itextpdf-5.5.5.jar.itext-asian-5.2.0.j ...
- Java 用Freemarker完美导出word文档(带图片)
Java 用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...
- java根据模板导出PDF详细教程
原文:https://blog.csdn.net/pengyufight/article/details/75305128 题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word ...
- java根据模板导出pdf
在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模板,有的只是随便把数据放里面生成文件,完全不考虑数据怎样放置的以及以后的维护性,想想还是自己总结一个完全版的导出 ...
- java模板导出PDF
本次完善综合特点: 一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把“张三”赋给name,那么输出的pdf里面name的地方就变成了张三,准确方便快捷 支持中文,可以使用自 ...
- Java根据Freemarker模板生成Word文件
1. 准备模板 模板 + 数据 = 模型 1.将准备好的Word模板文件另存为.xml文件(PS:建议使用WPS来创建Word文件,不建议用Office) 2.将.xml文件重命名为.ftl文件 3 ...
- java实现excel模板导出
一. 准备工作 1. 点击此下载相关开发工具 2. 将poi-3.8.jxls-core-1.0两个jar包放到工程中,并引用 3. 将excel模板runRecord.xls放到RunRecordB ...
- 结合模板导出PDF文件
@Action("report_exportJasperPdf") public String exportJasperPdf() throws Exception{ ...
随机推荐
- PMC亮相IDF展示12G SAS分层存储解决方式
引领大数据连接.传送以及存储,提供创新半导体及软件解决方式的PMC公司(纳斯达克代码:PMCS)出席了2014年4月2-3日在深圳举办的2014 IDF英特尔开发人员论坛. 此次,PMC将在 1层展示 ...
- css3制作动画性能问题
这篇文章主要讲的是怎样制作流畅动画,特别是针对移动端.在这里我首先介绍制作动画的几种方法的优缺点:接着会着重介绍用css3制作动画的注意事项. 1.用canvas.css3.jquery制作动画 Ca ...
- Redis源码解析:04字典的遍历dictScan
dict.c中的dictScan函数,用来遍历字典,迭代其中的每个元素.该函数使用的算法非常精妙!!!所以必须记录一下. 遍历一个稳定的字典,当然不是什么难事,但Redis中的字典因为有rehash的 ...
- top-100-of-the-best-useful-opensource-applications/
top-100-of-the-best-useful-opensource-applications/ http://www.ubuntulinuxhelp.com/top-100-of-the-be ...
- hdu 1535 Invitation Cards(spfa)
Invitation Cards Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- H3C MAC地址
- hdu 1016 Prime Ring Problem(dfs)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- Treap(树堆)入门
作者:zifeiy 标签:Treap 首先,我么要知道:Treap=Tree+Heap. 这里: Tree指的是二叉排序树: Heap指的是堆. 所以在阅读这篇文章之前需要大家对 二叉查找树 和 堆( ...
- Beta版是什么意思
外部测试版的意思. 软件会出现三种版本 1.alpha内部测试版本,极不稳定,一般也不会出现的公众视线,仅供内部测试人员测试用. 2.beta公共测试版,就是对外发布软件的测试版,收集公众的意见和建议 ...
- 解决vscode电脑卡顿问题
在安装了vscode之后,发现电脑很卡,cpu使用率高达100%. 解决方法1: 打开vscode之后,点击文件==>首选项==>设置搜索设置search.followSymlinks然后 ...