HTML转PDF(java版,经过测试好用,可以先用简单的html调试)
2015-06-15 20:08
411 查看
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;"
相关文章推荐
- 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简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树