html页面转成PDF,PDF下载

article/2025/9/11 15:50:47
先说要完成的功能:把填写好的信息转换成PDF文件,并且下载到本地,类似在智联上下载自己的简历,不过下载下来是PDF文件。
参考了网上的多篇博客,发现有两种方法,但两种方法都各有利弊。下边介绍这两种方法。
一、直接把html页面转化成图片,放到了PDF中,并下载到本地,这种方法实验了一下,导出的效果不好,图片不太清楚,好处就是比较简单,只要引入几个js即可实现:
1、需要进入的三个js:
 
  1. <script src="./js/libs/jquery-2.0.2.js"></script>  2. <script src="./js/exportpdf/jspdf.debug.js"></script>  3. <script src="./js/exportpdf/html2canvas.js"></script> 
2、 html页面:
<button id="topdf" type="button" class="btn btn-success btn-sm " style="margin-left:30px" onclick="downPDF()"><i class="icon-edit"></i>下载PDF</button>
3、 js中需要写的代码
 
/** 下载PDF*/
function downPDF(){ //要转成PDF的标签的范围。html2canvas($('#pdf'), {  height:3000,  onrendered: function(canvas) {           var imgData = canvas.toDataURL('image/png');  var doc = new jsPDF('p', 'px','a3');  //第一列 左右边距  第二列上下边距  第三列是图片左右拉伸  第四列 图片上下拉伸  doc.addImage(imgData, 'PNG', -9, 0,650,1500);  doc.addPage();  doc.addImage(imgData, 'PNG', -9, -900,650,1500);  //test.pdf是下载的pdf的名称doc.save('test.pdf');  }  });  
}
4、 简单的介绍一下代码:
html2canvas 是将当前页面转换成图片;
$('#pdf') 是要转换为图片的页面范围;
height:3000,这个高度要根据页面的大小灵活调整;
var doc = new jsPDF('p', 'px','a3'); p:横向,a3:纸张大小,默认是a4;
doc.addImage(imgData, 'PNG', -9, 0,650,1500);将转换后的图片放到pdf文档上,后面四个参数可根据实际效果灵活调整;
doc.addPage(); 一页pdf显示不完整的时候,新增一页;
5、 效果图:
二、第二种方法,个人认为第二种方法比较好,虽然写起了比较麻烦,但是,用起来比较灵活。这种方法不需要引入 js,使用IText进行转化。
先说相关的文件支持:3个jar包,一个中文字体。
iText-2.0.8.jar.jar
core-renderer.jar.jar
pebble-2.0.0.jar
simsun.ttc 新宋体(如果电脑里没有就去下载一个,电脑中安装的路径一般是C:/WINDOWS/Fonts/simsun.ttc)
1、pom文件中需要加入:
<!-- pdf begin --><dependency>   <groupId>com.lowagie</groupId>  <artifactId>itext</artifactId>  <version>2.0.8</version>  </dependency>   <dependency>  <groupId>org.xhtmlrenderer</groupId>  <artifactId>core-renderer</artifactId>  <version>R8</version>  </dependency><dependency><groupId>com.mitchellbosecke</groupId><artifactId>pebble</artifactId><version>2.2.0</version></dependency><!-- pdf end--> 
2、 java代码:
 import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.dongao.common.util.DateUtil;
import com.dongao.job.model.StudentVo;
import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;
import com.mitchellbosecke.pebble.PebbleEngine;
import com.mitchellbosecke.pebble.template.PebbleTemplate;/*** 下载PDF文件* @author xiao**/
@Controllerpublic class DownPDFController extends BaseController {private static final String FONTPATH = "C:/WINDOWS/Fonts/simsun.ttc";//支持中文字体(放哪里都行) @RequestMapping("/exportPdf")@ResponseBodypublic String exportPdf( HttpServletResponse response,HttpServletRequest request) throws Exception{String html = createHtml("F:/");  String pdf = html2Pdf(html, "F:/测试.pdf");  //如果在控制类有response对象可以直接转换后的pdf文件,在控制类方法需要return null  downloadFile(pdf, "我的PDF文件.pdf", response,request);  //return null;  System.out.println("create html success! 文件存放路径:" + pdf);  return "导出成功!";}/*** 参数和模板组装* @return* @throws Exception*/public static String getPepple() throws Exception{Map<String, Object> context = new HashMap<String, Object>();context.put("resumeName", "张三");context.put("sex", "女");context.put("educationName", "大学");context.put("workYear", "3年");List<StudentVo> list=new ArrayList<StudentVo>();StudentVo s1=new StudentVo();s1.setAge(222);s1.setName("张一");StudentVo s2=new StudentVo();s2.setAge(333);s2.setName("张二");list.add(s1);list.add(s2);context.put("list", list);//一下是模板的创建PebbleEngine engine = new PebbleEngine.Builder().build();// 加载模版PebbleTemplate compiledTemplate = engine.getTemplate("template/test.html");Writer writer = new StringWriter();compiledTemplate.evaluate(writer, context);String output = writer.toString();System.out.println(output);return output;}/** * html转换pdf文件 * 注:支持中文,目前iText只支持上面FONTPATH定义的这种字体,所以html文件中也需要用样式设置字体为:SimSun * htmlPath 需要转换的html源文件 * pdfPath 转换后pdf文件存放地址 */  public String html2Pdf(String htmlPath, String pdfPath) {  try {  String url = new File(htmlPath).toURI().toURL().toString();  OutputStream output = new FileOutputStream(pdfPath);  ITextRenderer renderer = new ITextRenderer();  renderer.setDocument(url);  //解决中文支持问题(html的中文必须用SimSun字体,Java只能支持这1种字体)  ITextFontResolver fontResolver = renderer.getFontResolver();  fontResolver.addFont(FONTPATH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);  renderer.layout();  renderer.createPDF(output);  output.close();  //删除模板替换生成的新html文件  File htmlFile = new File(htmlPath);  if(htmlFile.exists()){  htmlFile.delete();  }  return pdfPath;  } catch (MalformedURLException e) {  e.printStackTrace();  return null;  } catch (FileNotFoundException e) {  e.printStackTrace();  return null;  } catch (DocumentException e) {  e.printStackTrace();  return null;  } catch (IOException e) {  e.printStackTrace();  return null;  }  } /** * 根据传入变量的字符串生成新的html文件 * @param htmlPath html文件地址 * @param targetPath 替换模板生成新html的存放地址 * @return */  public static String createHtml(String targetPath) {  try {      String htmlContext = getPepple();// 写入新的html文件  targetPath = targetPath + DateUtil.date2DateStr(new Date(), "yyyyMMddHHmmsss") + ".html";  BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(  new FileOutputStream(new File(targetPath)), "UTF-8")); bw.write(htmlContext);  bw.flush();  bw.close();  return targetPath;  } catch (Exception e) {  e.printStackTrace();  return null;  }  }/** * 文件下载-支持中文名称 * @param sourcePath下载文件全路径(F:/test.pdf) * @param fileName需要生成的下载文件名(HTML转PDF测试.pdf) * @param response * @throws Exception */  public static void downloadFile(String sourcePath, String fileName,  HttpServletResponse response,HttpServletRequest request) throws Exception {  // 读到流中  InputStream inStream = null;  try {  inStream = new FileInputStream(sourcePath);// 文件的存放路径  // 设置输出的格式  response.reset();  String name = new String((fileName));  response.addHeader("Content-Disposition", "attachment; filename="+ new String(name.getBytes(), "iso-8859-1")); // 循环取出流中的数据      byte[] b = new byte[100];  int len;    while ((len = inStream.read(b)) > 0) {  response.getOutputStream().write(b, 0, len);  }  response.getOutputStream().flush();  } catch (IOException e) {  e.printStackTrace();  } finally {  try {  inStream.close();  response.getOutputStream().close();  //删除源文件  /* File sourceFile = new File(sourcePath);  if(sourceFile.exists()){  sourceFile.delete();  } */ } catch (IOException e) {  e.printStackTrace();  }  }  } 
}
3、 test.html模板内容:
<body style = "font-family: SimSun;" >字符串举例:<div class="div-item fonts14"><p class="em-mart5">{{resumeName}}|{{sex}}|{{educationName}}|{{workYear}}工作经验|{{provinceName}}</p></div><br/><br/>集合和if条件遍历举例:  <br/>{% for st in list %}{% if st.name == "张一" %}{{ st.age }} {{ st.name }}{% elseif st.name == "张二" %}{{ st.age }} {{ st.name }}{% else %}<p>Please select a category</p>{% endif %}{% endfor %}		 </body>
4、效果图:

 
个人认为第二种方法虽然麻烦了点,但是灵活性比较好,可以随意的改变模板。个人还是比较偏向于第二种的。


 

http://chatgpt.dhexx.cn/article/AAntP56p.shtml

相关文章

怎么把pdf转为html?PDF转HTML转换器推荐

大家知道HTML格式吗&#xff1f;我们通常上网浏览的网页就是HTML格式。而PDF格式是我们常用的一种文件格式&#xff0c;在不同的设备上打开&#xff0c;既不会影响到PDF内容的排版&#xff0c;也不容易被修改。在工作中&#xff0c;有时为了查看PDF文件在网页状态下的排版&…

html如何转为pdf

本篇文章给大家介绍html转pdf的方式。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。 1、准备资源 itext.jar www.baidu.com html2canvas.js www.baidu.com 2、前端代码&#xff1a; //进行截图操作&#xff0c;document.querySe…

超级简单的html转换为pdf格式方法

类似这样一个网页 按住键盘上的ctrlp &#xff08;这个就是启动了打印选项&#xff09; 找到右上角那个地方&#xff0c;找到另存为PDF&#xff0c;然后这个网页就可以另存为PDF格式了。 我以前也用插件&#xff0c;现在感觉这个方法好用就把插件卸载了。

PDF转HTML格式怎么弄?将PDF转换为HTML的三种简便方法

PDF和HTML是两种常见的文档格式&#xff0c;它们在用途和外观上有很大的差异。然而&#xff0c;令人惊讶的是&#xff0c;这两种看似毫不相关的格式实际上可以相互转换。 一些网页编辑人员在更新网站内容时&#xff0c;通常会先将内容保存为PDF文件&#xff0c;然后在发布时将…

前端实现HTML转PDF下载的两种方式

方式一&#xff1a;使用html2canvas和jspdf插件实现 该方式是通过html2canvas将HTML页面转换成图片&#xff0c;然后再通过jspdf将图片的base64生成为pdf文件。实现步骤如下&#xff1a; 1,下载插件模块 npm install html2canvas jspdf --save2,定义功能实现方法 在项目工具…

最好用Html转pdf的工具——wkhtmltopdf

实习时公司需要把一些html页面中的部分内容生成pdf文件&#xff0c;然后我就找一些用php把html页面围成pdf文件的类。方法是可谓是找了很多很多&#xff0c;什么html2pdf,pdflib,FPDF这些都试过了&#xff0c;但是都没有达到我要的求&#xff08;主要是不能解决中文乱码的问题以…

PDF技术(四)-Java实现Html转PDF文件

html转换为pdf的关键技术是如何处理网页中复杂的css样式、以及中文乱码处理。 各实现对比表 于Windows平台进行测试&#xff1a; 基于IText 基于FlyingSaucer 基于WKHtmlToPdf 基于pd4ml 跨平台性 跨平台 跨平台 跨平台 跨平台 是否安装软件 否 否 需安装WKHtmlT…

Java实现HTML转PDF

Java实现HTML转PDF 效果图一、添加maven依赖二、代码示例三、踩坑&#xff1a;1.simsun.ttc 文件找不到问题2.中文显示问题&#xff1a;3. 问题&#xff08;当然不知这种问题 还有 >等一些特殊转义符号这里只罗列一种&#xff09; 效果图 上图是 html 效果图 生成PDF效果…

【html转pdf】html页面导出为pdf文件,纯html版本,简单实现pdf转换【html2canvas+jspdf】

前言 最近遇到的需求&#xff0c;把html转成pdf文件下载导出。 目前网上看了下&#xff0c;有三种方法&#xff0c;但是其中两种需要后端配合 一种是纯前端实现的&#xff0c;比较简单。所以就使用了这种。 也就是html2canvas jspdf 的这种方法 这种方法实现的思路就是&#…

HTML页面导出为PDF(JSPDF、ITEXT、WKHTMLTOPDF)

html页面导出pdf&#xff0c;本来是一件很简单的事情&#xff0c;在浏览器直接打印(Mac快捷键为⌘p&#xff1b;Windows快捷键为ctrlp)&#xff0c;就可以把页面另存为pdf文件&#xff0c;但对于要经常把页面导出为pdf的用户来说并不友好&#xff0c;一个合格程序员的标准就是&…

html转pdf(总结五种方法Java)

html转pdf&#xff08;总结五种方法Java&#xff09; Java 实现html转pdf&#xff0c;总结五种方法。 推荐使用wkhtmltopdf,Itext 方法一&#xff1a;使用wkhtmltopdf 1、下载插件wkhtmltopdf https://wkhtmltopdf.org/downloads.html 2、本机测试 本目录下cmd进入 输入命…

Java 动态规划

Java中的动态规划 介绍 动态规划典型的被用于优化递归算法&#xff0c;因为它们倾向于以指数的方式进行扩展。动态规划主要思想是将复杂问题&#xff08;带有许多递归调用&#xff09;分解为更小的子问题&#xff0c;然后将它们保存到内存中&#xff0c;这样我们就不必在每次…

PDF如何转换成jpg图片

PDF文件转换成jpg&#xff0c;有些人一看到问题可能有点懵逼&#xff0c;其实就是PDF转换成图片了&#xff0c;只要转换器中的PDF转图片功能中图片格式支持jpg格式&#xff0c;就可以直接转换成jpg图片了&#xff0c;比如奥凯丰 PDF转换大师&#xff0c;支持PDF转jpg、PDF转png…

数据结构和算法Java实现(韩顺平)

目录 稀疏数组 队列 数组模拟队列思路 数组模拟环形队列 链表 单链表的翻转 单链表的逆序输出&#xff08;栈&#xff09; 双向链表 Jasephu 问题 栈 数组模拟 栈实现计算器 中缀表达式 计算器 逆波兰表达式 &#xff08;后缀表达式&#xff09; 中缀转后缀实现计算…

pdf文件转图片(java实现)

项目中pdf文件太大&#xff0c;在手机端打开缓慢。需要将pdf文件转换成图片。加载比较快&#xff0c;增加用户体验。话不多说&#xff0c;直接上干货。 一、在pom引入依赖的jar <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><dependency&g…

袋鼠云与中航金网达成战略合作并成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

基于java实现PDF转图片图片合成PDF

平常在工作中&#xff0c;经常需要用到pdf转换成图片或者图片转换成pdf的功能。能将pdf转换成图片的工具比较多&#xff0c;比如wps就支持转换为图片&#xff0c;不过高清的转换需要开通会员才行&#xff0c;比较麻烦。免费的转换不光清晰度有问题&#xff0c;还存在水印等&…

《Java语言程序设计(第三版 沈泽刚)》编程练习2

编程练习 2 2.1 编写程序&#xff0c;从键盘上输入一个double类型的华氏温度&#xff0c;然后将其转换为摄氏温度输出。转换公式为&#xff1a; 摄氏度 &#xff08; 5 / 9 &#xff09;&#xff08;华氏度 − 32 &#xff09; 摄氏度&#xff08;5/9&#xff09;&#xff08…

PDF怎么转换成jpg图片保存?简单几步就能解决。

在我们的日常工作和生活中&#xff0c;我们经常会和别人在线传输各种文件。但是在传输Word文档、Excel表格、PPT等格式的文件时&#xff0c;文件内容排版和布局容易出现变化。因此&#xff0c;人们在传输文件时一般都将文件转换为PDF&#xff0c;但PDF文件在手机上观看并不方便…

pdf如何转换成jpg图片?

pdf如何转换成jpg图片&#xff1f;PDF&#xff08;Portable Document Format&#xff09;是一种常见的文件格式&#xff0c;由Adobe Systems创建。与其他文档格式相比&#xff0c;它具有固定页面布局和跨平台兼容性等优点&#xff0c;因此广泛应用于电子书、论文、技术手册、合…