素材巴巴 > 程序开发 >

java开发html转pdf 解决方案

程序开发 2023-09-05 21:50:41

    之前在工作中遇到过一个需求,是将用户填写的申报,由固定模板的来生成pdf,后来想到先把内容生成html,

然后再把html格式的内容转换成pdf。

    之前在网上找了很多,有很多内容都是转载的,后来折腾了好几天才试出一个真实能用的,所以在这里记录一下。方便以后查阅,也希望能帮到别人。

1.所需jar包

 core-renderer.jar ,iText-2.0.8.jar

2、示例html


 
 
  
 	

2233322dsss--你好--dss2

w2

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镜像


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。