java实现html转pdf方法步骤

 更新时间:2023年08月01日 10:07:14   作者:白白可以改变  
这篇文章主要给大家介绍了关于java实现html转pdf方法的相关资料,要将HTML转换成PDF,我们需要借助Java中的第三方库,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

1.需求:

将一个html页面转成pdf格式。

2.方法:

在实现之前先考虑一个问题,pdf是前端生成还是后端生成。这里采用pdfbox+itext(PDF文件名可自定义)技术在服务端生成。优点:免费,不需要安转软件,速度快,对于开发者而言,开发中仅需导入相应jar,且易部署。

缺点:对于html标签比较严格。

3.实现:

3.1 需要的jar

itext-2.0.8.jar+pdfbox-2.0.19.jar

3.2 准备好html页面代码(注意:这里需要手动指定字体):

sHtml += "<!DOCTYPE html[<!ENTITY nbsp ' '>]>";
	sHtml += "<html>";
	sHtml += "<head>";
	sHtml += "</head>";
	sHtml += "<body style='font-family:SimSun !important;'>";
	sHtml += "<h1>这里是测试PDF代码部分</h1>";
	sHtml += "</body>";
	sHtml += "</html>";

3.3 服务端开始生成PDF文件:

public static void toPdf(String sHtml) {
		try {
			//创建PDf文件
			ITextRenderer renderer = new ITextRenderer();
			ITextFontResolver fontResolver = renderer.getFontResolver();
			//C:/WINDOWS/Fonts/SimSun.ttc 系统自带的语言包,直接引用
			fontResolver.addFont("C:/WINDOWS/Fonts/SimSun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
			fontResolver.addFont("C:/WINDOWS/Fonts/Arial.ttf",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);// 宋体字
			String sDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
    		String sTime = new SimpleDateFormat("HHmmssSSS").format(new Date());
			//指定文件存放路径
			URL sUrlPath = 当前类名.class.getResource("/");
			String sPath = sUrlPath.toURI().getPath();
			sPath1 = sPath.replace("WEB-INF/classes/", "");
			String sPathFolder = sPath+sDate+"\\";
			File filePath = new File(sPathFolder);
    		if(!filePath.exists()  && !filePath.isDirectory()){
    			filePath.mkdirs();
    		}
    		String sFileName = sDate+sTime+".pdf";
			String sPathSave = sPathFolder+sFileName;
			OutputStream os = new FileOutputStream(sPathSave);
			//使用有setDocumentFromString()方法的jar包
			renderer.setDocumentFromString(sHtml);
			renderer.layout();
			renderer.createPDF(os);
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

3.4 前端页面发起请求,服务端将生成的PDF文件返回。

String sTitle = "测试PDF文件名";
File file = new File(sFileUrl);//这里的sFileUrl即上面PDF保存路径
	try {
	    OutputStream outputStream = response.getOutputStream();
	     //加载pdf附件到PDF流中
	     PDDocument document = PDDocument.load(new FileInputStream(file));
	    response.reset();
	    response.setContentType("application/pdf;charset=UTF-8");
	    response.setHeader("Content-Disposition", "inline;filename=" + URLEncoder.encode(sTitle, "UTF-8"));
	    response.setContentType("application/pdf;charset=UTF-8");
	    //从PDF流中获得PDF文档属性对象
	    PDDocumentInformation info = document.getDocumentInformation();
	    //设置PDF文档属性对象的文件名称(最重要的环节)
	    info.setTitle(sTitle);
	    document.setDocumentInformation(info);
	    //修改完直接输出到响应体中
	    document.save(outputStream);
	    outputStream.close();
	    document.close();
	    out.clear();  
		out = pageContext.pushBody();
	} catch (Exception e) {
	}

完成!

总结

到此这篇关于java实现html转pdf方法步骤的文章就介绍到这了,更多相关java html转pdf内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java解决浮点数计算不精确问题的方法详解

    Java解决浮点数计算不精确问题的方法详解

    在 Java 中,浮点数计算不精确问题指的是使用浮点数进行运算时,由于浮点数的内部表示方式和十进制数的表示方式存在差异,导致计算结果可能出现误差,本文就给大家介绍一下Java如何解决浮点数计算不精确问题,需要的朋友可以参考下
    2023-09-09
  • idea误删libraries重载的解决方案

    idea误删libraries重载的解决方案

    本文分享了作者个人在重载Maven项目时遇到的问题及解决方法,希望能帮助到有类似问题的读者
    2025-12-12
  • mybatisplus如何根据不同ID批量更新

    mybatisplus如何根据不同ID批量更新

    本文介绍了MyBatis-Plus中使用Wrapper批量更新数据的方法,包括使用UpdateWrapper批量更新相同属性值、根据ID数组批量更新相同属性值,以及使用updateBatchById方法批量更新多个属性值,提供了示例代码和注意事项
    2026-04-04
  • Java异常Exception详细讲解

    Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等
    2022-07-07
  • Java实现猜数字小游戏代码

    Java实现猜数字小游戏代码

    大家好,本篇文章主要讲的是Java实现猜数字小游戏代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Java实现字符串大小写转换的常用方法

    Java实现字符串大小写转换的常用方法

    在 Java 中,字符串大小写转换是文本处理的核心操作之一,Java 提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法,并提供实用代码示例,需要的朋友可以参考下
    2025-12-12
  • SpringBoot创建RSocket服务器的全过程记录

    SpringBoot创建RSocket服务器的全过程记录

    RSocket应用层协议支持 Reactive Streams语义, 例如:用RSocket作为HTTP的一种替代方案。这篇文章主要给大家介绍了关于SpringBoot创建RSocket服务器的相关资料,需要的朋友可以参考下
    2021-05-05
  • Java修饰符 abstract,static,final 的区别详解

    Java修饰符 abstract,static,final 的区别详解

    以下是对Java修饰符abstract,static,final的区别进行了详细的介绍,需要的朋友可以过来参考下
    2013-09-09
  • SpringBoot如何通过配置禁用swagger

    SpringBoot如何通过配置禁用swagger

    这篇文章主要给大家介绍了关于SpringBoot如何通过配置禁用swagger的相关资料,Swagger用来在开发阶段方便前后端分离的项目实战中,提高前后端人员的工作效率,降低交流成本,但是版本上线之后要是把Swagger带上去会存在很大的风险,需要的朋友可以参考下
    2023-08-08
  • Spring AOP 切面@Around注解的用法说明

    Spring AOP 切面@Around注解的用法说明

    这篇文章主要介绍了Spring AOP 切面@Around注解的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02

最新评论