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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值