HTML转PDF(java版,经过测试好用,可以先用简单的html调试)

来源:互联网 发布:js 字符串等于 编辑:程序博客网 时间:2024/06/05 00:53
package net.zkbc.mp.util;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import org.xhtmlrenderer.pdf.ITextFontResolver;import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.DocumentException;import com.lowagie.text.pdf.BaseFont;/** * 对html的规范要求极高,例如:页面中<mate></mate>必须闭合,必须: <br /> *  * <pre> * <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" * "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html * xmlns="http://www.w3.org/1999/xhtml"> *  * @author zsj * */public class PdfUtil {public static void main(String[] args) throws Exception {// String filePath = PdfUtil.class.getClassLoader().getResource("")// .toString()// + "simsun.ttc";// System.out.println(filePath.replaceAll("file:/", ""));// System.out.println(new File(filePath));htmlToPdf("/data/fs/sinspector/BJ20150522001.pdf","localhost:9080/account/observerInforeport/BJ20150522001");}/** * 把URL转换为PDF *  * @param outputFile *            , 示例:/data/fs/inspector/BJ20150522001.pdf * @param url *            ,示例:http :xxxx * @return * @throws Exception */public static boolean htmlToPdf(String outputFile, String url)throws Exception {File outFile = new File(outputFile);if (!outFile.exists()) {outFile.getParentFile().mkdirs();}OutputStream os = new FileOutputStream(outputFile);ITextRenderer renderer = new ITextRenderer();renderer.setDocument(url);// String fontPath = PdfUtil.class.getClassLoader().getResource("/")// .getPath();String fontPath = PdfUtil.class.getClassLoader().getResource("").toString().replaceAll("file:/", "")+ "simsun.ttc";System.out.println(fontPath);// 解决中文支持问题ITextFontResolver fontResolver = renderer.getFontResolver();fontResolver.addFont(fontPath, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);renderer.layout();renderer.createPDF(os);os.flush();os.close();return true;}public static void htmlToPdf(OutputStream os, String url)throws DocumentException, IOException {ITextRenderer renderer = new ITextRenderer();renderer.setDocument(url);String fontPath = PdfUtil.class.getClassLoader().getResource("/simsun.ttc").getPath();System.out.println(fontPath);// 解决中文支持问题ITextFontResolver fontResolver = renderer.getFontResolver();fontResolver.addFont(fontPath, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);renderer.layout();renderer.createPDF(os);os.flush();}}

文件下载地址:http://download.csdn.net/detail/yx511500623/8809519


其中还遇到一个头疼的问题 ,就是 一行过长的话 ,不会自动换行~
不过解决了!


另外有关中文换行 问题 有网友问我 后 我发现 解决途径必须需要修改源码 修改后源码包我已经传到 了 附件上core-renderer-R8-0604.jar
有什么疑问可以加我 qq :6637152交流


另外很多网友问我要项目demo 和相关文件
我这个功能是集成在公司项目里的 原先不方便放出来,现在我已经单独抽出一个开源项目供网友参考代码,https://git.oschina.net/zqb/usk.git


老外做的东西,没有考虑到中文问题。默认提供的包里,中文不会换行,有人修改了源代码,解决了这个问题,重新编译好的包在附件里,可以下载。需要注意的是,在官网提供的jar包里,有两个包,一个是core-renderer.jar,另一个是core-renderer-minimal.jar。引用时,只需引用前者就行。有人曾经说用这个重新编译后的包替换了原来的包之后,不起作用,原因就在此。

中文换行包下载地址:http://community.csdn.net/detail/shanliangliuxing



   另外,想要中文换行,如果是table,那么table 的style必须加上这句话 

html代码:

 style="table-layout:fixed; word-break:break-strict;"  


0 0
原创粉丝点击