java开发html转pdf 解决方案
之前在工作中遇到过一个需求,是将用户填写的申报,由固定模板的来生成pdf,后来想到先把内容生成html,
然后再把html格式的内容转换成pdf。
之前在网上找了很多,有很多内容都是转载的,后来折腾了好几天才试出一个真实能用的,所以在这里记录一下。方便以后查阅,也希望能帮到别人。
1.所需jar包
core-renderer.jar ,iText-2.0.8.jar
2、示例html
2233322dsss--你好--dss2
html中要注意的是字体的设置,
font-family:SimSun;
在下面的java代码中,也需要加载对应的字体,不然会出现中文显示不出来的情况
3、java代码
package wqb.pdf.test;import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.pdf.BaseFont;/*** html转pdf* * @author wqb**/
public class PdfDemoTest {public static void main(String[] args) throws Exception {//读取html的流InputStream inputStream = PdfDemoTest.class.getResourceAsStream("test.html");//流转换成字符串StringBuffer out = new StringBuffer();byte[] b = new byte[4096];for (int n; (n = inputStream.read(b)) != -1;) {out.append(new String(b, 0, n));}String html = out.toString();String pdffile = "C:\wqb\test.pdf";OutputStream os = new FileOutputStream(pdffile);ITextRenderer renderer = new ITextRenderer();renderer.setDocumentFromString(html);// writer.setPageEvent(header);ITextFontResolver fontResolver = renderer.getFontResolver();// 添加字体支持,路径可以自身项目的实际情况设置,我这里是本地项目,而且为了方便测试,就写成固定的了// 实际项目中,可以获取改字体所在真实的服务器的路径,这个方法是本地地址和网络地址都支持的// 这里面添加的是宋体fontResolver.addFont("C:\software\eclipse-neon\workspace\htmlToPdfDemo\bin\SIMSUN.TTC",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);renderer.layout();renderer.createPDF(os);os.flush();os.close();}
}
4、实际效果
总结:示例代码比较简单,只是单纯的实现了导出pdf而已。在真实业务场景中,html的内容一般是用template或者Velocity 生成。并且字体的路径也不能写死,可以根据自己的项目情况采用合适的读取办法。
需要注意的是字体,一定要设置!!!
对html的规范要求极高,例如:页面中
示例代码下载地址
比较缺分,所以资源要分了。谅解
------------------------------------------------------码农专用分割线------------------------------------------------------
上面描述的方法,适用环境是传统的mvc模式的java项目,同时比较适合简单的内容的pdf,局限性比较强。在目前这种前后端分离的大环境下,已经不是太试用了。
在后面做的项目中,发现了下面一款开源的可独立部署的 web打印和html转pdf工具,比较适合在前后分离的项目 中使用 ,推荐给大伙。我在实际上面中用到了,效果非常好,强烈推荐
bookjs-eazy: WEB打印,HTML转PDF工具。适配chrome headless和wkhtmltopdf docker镜像在线生成PDF 1. 只需专注用H5构件你的PDF内容,而无需关心分页及内容截断问题,内容满了,自动换页,支持预览、WEB打印、页码/目录、自定义页眉页脚。2.前后端皆可生成PDF,命令行PDF生成工具 - Gitee.com
bookjs-easy 的独立部署的pdf下载服务,使用nodejs部署或者直接用docker
screenshot-api-server: 使用node express和puppeteer搭建的WEB截图API服务 网页截图 & pdf 生成 API服务 & docker镜像
标签:
相关文章
-
无相关信息