java篇——java导出pdf文件
2016-01-12 09:09
459 查看
我这里使用的是利用iText+flying sauser将html模板强制转换为pdf文件
File f = new File("d:/");
File htmlFile = new File(f,“test.html”);//html文件
File pdfFile = new File(f,"test.pdf");//生成的pdf文件
OutputStream os = new FileOutputStream(pdfFile);
ITextRenderer iTextRenderer = new ITextRenderer();//创建一个ITextRenderer
iTextRenderer.setDocument(htmlFile.toURI().toURL().toString());
ITextFontResolver fontResolver = iTextRenderer.getFontResolver();
fontResolver .addFont("C:/Windows/fonts/simsun.ttc",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//设置字体(建议:这里用的是电脑的宋体的地址,以防万一建议在项目中加一个simsun.ttc,然后地址用项目中的,万一客户的电脑没有simsun.ttc呢,那导出来的pdf就不会显示中文字了,另外html页面上还需设置字体为宋体,font-family:SimSun;)
iTextRenderer.getSharedContext().setBaseURL("file://"+File.separator+f.getPath());//处理图片的相对路径,为了在windows和linux系统下都能实现图片相对路径,加上File.separator,注意:f.getPath()必须是绝对路径,如果你是相对路径,就有可能在你的电脑可以,在客户的电脑不可以了)
上面这句我的代码如下:
String url = "";
if(File.separator.equals("\\")){//判断系统
url = "file://"+File.separator+f.getAbsoluteFile();//windows
}else{
url = "file:/"+File.separator+f.getAbsoluteFile();//linux
}
iTextRenderer.getSharedContext().setBaseURL(url);//肯定有可以统一的办法,但是我已经折腾的够久了,所以就这样吧
iTextRenderer.layout();
iTextRenderer.createPDF(os);
tbr.close();
os.close();
在导出pdf文件时,可能还想让自定义一下分页,比如在封面和目录,想目录在下一页,在模板里加入这两句就可以了
.pageNext{page-break-after:always;}
在想分页的地方加上<div class="pageNext"></div>
代码纯手打,不排除手误的地方O(∩_∩)O~~
补充:上面引入自带的simsun.ttc文件时候,建议将字体文件设置为全局变量,不然每下载一次文件就会加载一次字体文件,这会不断的加大的你的内存,所以改变为全局只加载一次就好
File f = new File("d:/");
File htmlFile = new File(f,“test.html”);//html文件
File pdfFile = new File(f,"test.pdf");//生成的pdf文件
OutputStream os = new FileOutputStream(pdfFile);
ITextRenderer iTextRenderer = new ITextRenderer();//创建一个ITextRenderer
iTextRenderer.setDocument(htmlFile.toURI().toURL().toString());
ITextFontResolver fontResolver = iTextRenderer.getFontResolver();
fontResolver .addFont("C:/Windows/fonts/simsun.ttc",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//设置字体(建议:这里用的是电脑的宋体的地址,以防万一建议在项目中加一个simsun.ttc,然后地址用项目中的,万一客户的电脑没有simsun.ttc呢,那导出来的pdf就不会显示中文字了,另外html页面上还需设置字体为宋体,font-family:SimSun;)
iTextRenderer.getSharedContext().setBaseURL("file://"+File.separator+f.getPath());//处理图片的相对路径,为了在windows和linux系统下都能实现图片相对路径,加上File.separator,注意:f.getPath()必须是绝对路径,如果你是相对路径,就有可能在你的电脑可以,在客户的电脑不可以了)
上面这句我的代码如下:
String url = "";
if(File.separator.equals("\\")){//判断系统
url = "file://"+File.separator+f.getAbsoluteFile();//windows
}else{
url = "file:/"+File.separator+f.getAbsoluteFile();//linux
}
iTextRenderer.getSharedContext().setBaseURL(url);//肯定有可以统一的办法,但是我已经折腾的够久了,所以就这样吧
iTextRenderer.layout();
iTextRenderer.createPDF(os);
tbr.close();
os.close();
在导出pdf文件时,可能还想让自定义一下分页,比如在封面和目录,想目录在下一页,在模板里加入这两句就可以了
.pageNext{page-break-after:always;}
在想分页的地方加上<div class="pageNext"></div>
代码纯手打,不排除手误的地方O(∩_∩)O~~
补充:上面引入自带的simsun.ttc文件时候,建议将字体文件设置为全局变量,不然每下载一次文件就会加载一次字体文件,这会不断的加大的你的内存,所以改变为全局只加载一次就好
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树