您的位置:首页 > 编程语言 > Java开发

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文件时候,建议将字体文件设置为全局变量,不然每下载一次文件就会加载一次字体文件,这会不断的加大的你的内存,所以改变为全局只加载一次就好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java pdf