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

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 html pdf