利用itext导出HTML到PDF,解决中文不显示和中文不换行的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/beaAcmen/article/details/78252921

Java导出PDF用的最广的还是itext,itext导出PDF的方式有很多种,今天我介绍的是导出HTML到PDF,在我做这个功能的时候遇到过中文不显示,中文过长不会自动换行的问题,最后还是通过修改源码包解决了中文不换行的问题,不容易啊!!需要说明的是我是直接在后台查的数据并拼接成的HTML。

首先要引入三个jar包,jar包的下载地址为:http://download.csdn.net/download/beaacmen/10024666;此jar包已经是修改过的,亲测可用,下面直接贴代码

public void exportTopdf() throws Exception {
		int fileNum = new Random().nextInt(1000000) + 1;//生成一个随机数作为pdf的名称
		String fileUrl = "E:\\" + fileNum + ".pdf";//设置导出路径

		OutputStream os = new FileOutputStream(fileUrl);
		ITextRenderer renderer = new ITextRenderer();
		ITextFontResolver font = renderer.getFontResolver();
		font.addFont("C:/WINDOWS/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//添加中文识别,这里是设置的宋体,Linux下要换成对应的字体


		StringBuffer html = new StringBuffer();
		// DOCTYPE 必需写否则类似于 这样的字符解析会出现错误  
		html.append("<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN/' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>");
		html.append("<html xmlns='http://www.w3.org/1999/xhtml'>");
		html.append("<head><style>body{font-family:SimSun;font-size:14px;}</style> ");//此处一定要加,不然字体也不会显示,不要加line-height属性
		html.append("<title>" + "无标题文档" + "</title>");
		html.append("</head>");
		html.append("<body>");
		html.append("<div>此处添加需要导出的HTML代码</div>")//这里根据实际情况替换成你的HTML代码就OK了
		html.append("</body></html>");

		renderer.setDocumentFromString(html.toString());
		// 解决图片的相对路径问题  
		renderer.getSharedContext().setBaseURL("http://localhost:8080");//导出到服务器
		renderer.layout();
		renderer.createPDF(os);
		renderer.finishPDF();
	}
到此为止这个功能就算做完了,需要注意的是,这里是将PDF文件导出到了你服务器的E盘下,而不是本地,如果要导出到本地还需要将这个文件从服务器上写下来,关于如何从服务器下载文件到本地,此后我会介绍

展开阅读全文

没有更多推荐了,返回首页