依赖:

<script src="./js/html2canvas.min.js"></script>
<script src="./js/jspdf.min.js"></script>

示例html DOM:

<div id="page1" style="width: 2000px;">内容</div>

核心js:

// html转pdffunction html_2_pdf(dom_id, pdf_name) {// 预定参数let scale = 3; // 图片清晰度倍率,越大越清晰,默认1,建议2let pdf_img_scale = scale - 0.2; // 图片填充pdf倍率,使内容尽量铺满pdflet dpi = window.devicePixelRatio * scale;let page_model = "choose"; // choose:自动选择模式,其他值则使用a4模式(太宽的内容平铺后字变小)// html参数let html_dom = document.getElementById(dom_id);let dom_width = html_dom.offsetWidth;let dom_height = html_dom.offsetHeight;if (!dom_id || !pdf_name || !html_dom || !dom_width || !dom_height){console.info("dom参数不全:", [dom_id, pdf_name, html_dom, dom_width, dom_height]);return;}html2canvas(html_dom, { // html转图片logging: false,dpi: dpi,scale: scale,}).then(function(canvas) {// pdf参数:自适应纸张类型let cm_width = dom_width/(dpi/2.54)/10; // 像素转厘米let format = "a4";let page_width = 210 - 10; // mm,保留左右5mm空白let page_height = 277 - 10; // mm,保留上下5mm空白let orientation = "portrait";if (page_model === "choose"){if (cm_width<21.0+0.5){format = "a4";page_width= 210 - 10;page_height=277-10;}else if (cm_width<=29.7+0.5){format = "a3";page_width=297- 10;page_height=420- 10;}else if (cm_width<=42.0+0.5){format = "a2";page_width=420- 10;page_height=594- 10;}else if (cm_width<=59.4+0.5){format = "a1";page_width=594- 10;page_height=841- 10;}else if (cm_width<=84.1+0.5){format = "a0";page_width=841- 10;page_height=1189- 10;}else if (cm_width<=100.0+0.5){format = "b0";page_width=1000- 10;page_height=1414- 10;}else {format = "b0";page_width=1000- 10;page_height=1414- 10;} // 超出范围都用b0纵向排版}console.info("PDF参数:", [html_dom, pdf_name, dom_width, cm_width, format]);// pdf参数let pdf = new jsPDF({unit: "pt", // 单位,pt、mmformat: format, // 页面大小,a0,a1,a2,a3,a4,b0orientation: orientation, // 页面方向,portrait: 纵向,landscape: 横向putOnlyUsedFonts: true, // 只包含使用的字体compress: true, // 压缩文档precision: 16, // 浮点数的精度});// testlet src = canvas.toDataURL('image/jpeg', 1.0); // 图片base64,jpegconsole.log(src);// 图片转pdflet ctx = canvas.getContext("2d");let imgHeight = Math.floor(page_height * canvas.width / page_width);   //按纸显示比例换算一页图像的像素高度let renderedHeight = 0;console.info("图像参数:", [canvas.width, canvas.height, page_width, page_height, imgHeight]);let page_num = 1; // pdf页数while(renderedHeight < canvas.height) { // 渲染分页,并合成pdfconsole.info("正在合成pdf页="+page_num+" ...");let page = document.createElement("canvas");page.width = canvas.width;page.height = Math.min(imgHeight, canvas.height - renderedHeight); // 可能内容不足一页//用getImageData剪裁指定区域,并画到前面创建的canvas对象中page.getContext("2d").putImageData(ctx.getImageData(0, renderedHeight, canvas.width, Math.min(imgHeight, canvas.height - renderedHeight)), 0, 0);pdf.addImage(page.toDataURL("image/jpeg", 1.0), "JPEG", 10, 10, page_width*pdf_img_scale, Math.min(page_height, page_width * page.height / page.width)*pdf_img_scale );    //添加图像到页面,保留10mm边距renderedHeight += imgHeight;if(renderedHeight < canvas.height){pdf.addPage(); // 如果后面还有内容,添加一个空页}console.info("pdf页="+page_num+" 合成完成。");page_num++;}console.info("合成pdf完成,请保存pdf文件。总页数="+(page_num-1), [page_num-1, dom_id, pdf_name]);pdf.save(pdf_name);});}// 调用合成函数// html_2_pdf('page1', 'pdf_name.pdf');

-

-

-

js将Excel转成PDF(纸张、分页、铺满、提高清晰度)相关推荐

  1. excel中html批量转化为pdf文件,批量将Excel转换成pdf文档的方法

    在我们办公过程中建立各种表格都喜欢用excel软件,特别是那些人事部的同事,将数据存储好之后,因为担心他人修改我们的数据,所以会选择将excel文件转换成比较难以编辑的pdf文件.可是,excel如何 ...

  2. excel中html批量转化为pdf文件,如何将大量的Excel转换成PDF?

    大家都知道Excel表,最怕别人修改了,尤其是数据.一旦修改,可能就会有麻烦.那如何是好呢?有一个最简单的办法就是把Excel转换成PDF文件,这样别人只能阅读不能编辑,就不用担心被修改了,哈哈~下面 ...

  3. excel转换成PDF的软件

    怎么把Excel转换成PDF的方法有很多,经常使用软件的用户都知道国产的迅捷Excel转换成PDF转换器具备良好的识别技术,针对不同形式的文本都能快速识别,同时支持批量文档上传,相对于普通的PDF转换 ...

  4. 将excel转成PDF导出

    利用NPOI将excel转成PDF导出,实际上也是先生成excel文件,然后将excel文件转成PDF文件,需要先确认已经安装好了office,并且已经在服务器上开通了相应的权限 /// <su ...

  5. excel转换成pdf的常用方法

    如今办公文档中,使用频率较高的两种文档分别是Excel的XLS格式和Adobe Acrobat的PPDF格式文件.目前公司财务统计绝大多数的文件是Excel格式的,而PDF格式文件也因为其在网络上传输 ...

  6. 将excel转成pdf有哪些方法

    将excel转换成pdf也就是把excel表格文件转换成为PDF文件的格式,众所周知PDF是可移植电子文件格式,可以很好的兼容各种平台,能在很多系统中打开查看.那么能将excel转换成pdf的方法有哪 ...

  7. excel转换pdf java_用Java把Excel转换成PDF的方法

    用Java把Excel转换成PDF的方法 发布时间:2020-05-30 11:48:45 来源:亿速云 阅读:216 作者:鸽子 Java 将Excel转为PDF 本文将介绍在Java程序中如何将E ...

  8. Excel转换成PDF格式的方法

    我们在工作中会将做好的Excel数据交给领导,为了避免在文件传送过程中格式发生错乱:我们可以把Excel表格转换成PDF格式,这样我们在文件传送过程中就不会出现格式错乱的问题了.那怎么把Excel表格 ...

  9. 让你相见恨晚的Excel转换成PDF技巧

    日常工作中,总免不了要进行Excel表格扭转给他人,由于Excel格式或者office版本问题,导致Excel打开错误,或者空的,为了解决这样的问题,通常情况下,我们会将Excel转换成PDF,然后再 ...

最新文章

  1. TMG学习(十),发布DMZ区网站
  2. java开发的增查改删_在Java中实现增、删、改、查功能?
  3. Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
  4. Autoencoder 详解
  5. Framelayout
  6. 说说我的工作——桌面支持
  7. php java 通信_PHP与Java进行通信的实现方法
  8. emlog-FLY主题模板1.4版本免费完全开源
  9. (4)verilog语言编写计数器
  10. python3 windows console 输出乱码问题
  11. 阿里线上bug排查命令
  12. HDFS概述(6)————用户手册
  13. html5 教程网站
  14. python解析nmea0183协议获取GPS定位信息
  15. 测试过程中印象最深刻的bug?| 万能回答必杀技
  16. 微信缓存深度清理,一招清理20G隐藏的缓存垃圾
  17. 天津大学仁爱学院c语言期末考试题,天津大学仁爱学院2014-2015学年第1学期期末C语言复习...
  18. UC浏览器设置代理服务器JAVA_uc浏览器让JAVA手机变“聪明”的方法
  19. 免费赠送20个帆布包和2个咖啡杯活动规则必看(会搜索+复制粘贴就行)
  20. 一种Vin码扫描识别sdk技术

热门文章

  1. Python磁力获取器命令行工具 torrent-cli
  2. Mysql建表脚本转ClickHouse建表脚本
  3. C语言:拷贝函数拷贝字符串
  4. Ubuntu自用配置(Ubuntu 22.04LTS + 拯救者R9000P 2021)
  5. linux双网卡 ipv4 ipv6 双栈,linux ipv4 ipv6双栈 (优先ipv4而不使用ipv6配置)
  6. html字两边的横线_两边文字、中间横线的CSS写法
  7. Python数据分析与展示:pandas库统计分析函数-13
  8. 开发者,买电脑,配电脑时候的一些参数都能代表着什么样的性能
  9. SpEL - Spring Expression Language - 快速入门
  10. 骨传导耳机工作原理是什么?骨传导耳机对耳朵好吗?