html2canvas生成PDF并下载的解决方案

简介: html2canvas生成PDF并下载的解决方案
  1. 1.基于html2canvas 1.0.0-rc.5版本,不同的版本存在很大的差异,因此本文档不具备通用性;
  2. 2.本案例未涉及多内容分页的情况;


打印按钮

<div style="padding: 30px 0;text-align: center;">
    <button type="button" class="btn" onclick='printOut("jieji007")'>下载PDF文档</button>
</div>
<div class="page">
    <div class="page_box">
        <div id="printId">
            <div class="content">
           <!----打印区--->
            </div>
        </div>
    </div>
</div>


合并的table

  <table align="center" border="1" cellspacing="0">
                <tr>
                    <td colspan="5" class="title_td" style="font-size: 32px;padding: 10px;">山东省中医全科医生转岗培训结业考核报名表</td>
                </tr>
                <tr>
                    <td width="100px">姓名</td>
                    <td>lockdatav</td>
                    <td width="100px">性别</td>
                    <td>女</td>
                    <td rowspan="8" style="padding: 10px;"><img width="160" height="242" alt="lockdatav" src="upload/2022-01/4413_7060955e92d45a7ab29fc52ce14bc697.jpg"></td>
                </tr>
                <tr>
                    <td>地区</td>
                    <td>青岛市李沧区</td>
                    <td>身份证号</td>
                    <td>410622198207175018</td>
                </tr>
                <tr>
                    <td>出生年月</td>
                    <td>2022年01月</td>
                    <td>联系电话</td>
                    <td>13506843428</td>
                </tr>
                <tr>
                    <td>毕业时间</td>
                    <td>2022年01月</td>
                    <td>毕业学校</td>
                    <td>2</td>
                </tr>
                <tr>
                    <td>工作单位</td>
                    <td>1</td>
                    <td>所在科室</td>
                    <td>2</td>
                </tr>
                <tr>
                    <td>职称</td>
                    <td>1</td>
                    <td>职务</td>
                    <td>2</td>
                </tr>
                <tr>
                    <td>最高学历</td>
                    <td>高中</td>
                    <td>从事专业</td>
                    <td>12</td>
                </tr>
                <tr>
                    <td>通讯地址</td>
                    <td>1</td>
                    <td>电子邮箱</td>
                    <td>1@2.com</td>
                </tr>
                <tr>
                    <td colspan="5" class="title_td">理论培训信息</td>
                </tr>
                <tr>
                    <td>培训时间</td>
                    <td>2022年01月 至 2022年02月</td>
                    <td>培训单位</td>
                    <td colspan="2">1</td>
                </tr>
                <tr>
                    <td colspan="5" class="title_td">基层培训信息</td>
                </tr>
                <tr>
                    <td>培训时间</td>
                    <td>2022年01月 至 2022年02月</td>
                    <td>培训单位</td>
                    <td colspan="2">1</td>
                </tr>
                <tr>
                    <td colspan="5" class="title_td">临床培训信息</td>
                </tr>
                <tr>
                    <td>培训时间</td>
                    <td>2022年01月 至 2022年02月</td>
                    <td>培训单位</td>
                    <td colspan="2">1</td>
                </tr>
                <tr>
                    <td colspan="5" class="title_td">身份证信息</td>
                </tr>
                <tr>
                    <td colspan="5"><a href="upload/2022-01/4413_17e842cd98df89f61635f5d582639abe.jpg" target="_blank"><img width="120" height="90" alt="lockdatav" src="upload/2022-01/4413_17e842cd98df89f61635f5d582639abe.jpg"></a> <a href="upload/2022-01/4413_683f00ff6c496dab3ce60d865dfb9406.jpg" target="_blank"><img width="120" height="90" alt="lockdatav" src="upload/2022-01/4413_683f00ff6c496dab3ce60d865dfb9406.jpg"></a></td>
                </tr>
                <tr>
                    <td colspan="5" class="title_td">执业医师资格证</td>
                </tr>
                <tr>
                    <td colspan="5"><a href="upload/2022-01/4413_1958cbfd84d72d4f9d8c6de7d223411a.jpg" target="_blank"><img width="120" height="90" alt="lockdatav" src="upload/2022-01/4413_1958cbfd84d72d4f9d8c6de7d223411a.jpg"></a></td>
                </tr>
                <tr>
                    <td colspan="5" class="title_td">培训过程考核登记表</td>
                </tr>
                <tr>
                    <td colspan="5"><a href="upload/2022-01/4413_4f05dae27b7f18189c668c03f223a39b.jpg" target="_blank"><img width="120" height="90" alt="lockdatav" src="upload/2022-01/4413_4f05dae27b7f18189c668c03f223a39b.jpg"></a></td>
                </tr>
            </table>


PDF封装函数

/*PDF封装函数*/
function printOut(id) {
    //跳转页面顶部,防止空白;
    scroll(0,0);
    //生成画布;
    html2canvas(document.querySelector("#printId"), {allowTaint: true, scale: 2}).then((function (canvas) {
        var contentWidth = canvas.width;
        var contentHeight = canvas.height;
        //console.log(contentWidth);
        //console.log(contentHeight);
        var pageData = canvas.toDataURL("image/jpeg", 1);
        var pdfX, pdfY = contentHeight / 2 * .75;
        var whiteHeight = 60;
        /*A4纸的尺寸[595.28,841.89]
        * html页面生成的canvas在pdf中图片的宽高
        * */
        var pdfW = 595.32;
        var pdfH = 841.89;
        var imgX = contentWidth / 2 * .75;
        var imgY = contentHeight / 2 * .75;
        var imgH = 721.89;
        var position = 60; //页面偏移
        var pageTempHeight = contentHeight / 2 * .75;
        var PDF = new jsPDF("", "pt", "a4");
        if (imgY < imgH) PDF.addImage(whiteImg, "jpeg", 0, 0, pdfW, 60), PDF.addImage(pageData, "jpeg", 0, 0, imgX, imgH), PDF.addImage(whiteImg, "jpeg", 0, 781.89, pdfW, 60); else for (; pageTempHeight > 0;) PDF.addImage(pageData, "jpeg", 0, position, imgX, imgY), PDF.addImage(whiteImg, "jpeg", 0, 0, pdfW, 60), PDF.addImage(whiteImg, "jpeg", 0, 782.89, pdfW, 60), position -= imgH, (pageTempHeight -= imgH) > 0 && PDF.addPage();
        PDF.save(id + '_' + new Date().getTime() + '.pdf');
    }))
}
//跳转页面顶部,防止空白;
    scroll(0,0);


@lockdata.cn

相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
阿里云实时数仓实战 - 用户行为数仓搭建
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3&nbsp;)前置知识要求:熟练掌握 SQL 语法熟悉 Linux 命令,对 Hadoop 大数据体系有一定的了解 &nbsp; 课程大纲 第一章&nbsp;了解数据仓库概念 初步了解数据仓库是干什么的 第二章&nbsp;按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章&nbsp;数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章&nbsp;采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章&nbsp;用户行为数据仓库 严格按照企业的标准开发 第六章&nbsp;搭建业务数仓理论基础和对表的分类同步 第七章&nbsp;业务数仓的搭建&nbsp; 业务行为数仓效果图&nbsp;&nbsp;
相关文章
|
3月前
|
人工智能 文字识别 自然语言处理
熊猫 OCR 识别软件下载,支持截图 OCR、PDF 识别、多语言翻译的免费全能工具,熊猫OCR识别
本文介绍了几款实用的图文识别软件,包括熊猫OCR、Umi-OCR和天若OCR_本地版。熊猫OCR功能强大,支持多窗口操作、AI找图找色、OCR识别等;Umi-OCR免费且高效,具备截图OCR、批量处理等功能;天若OCR界面简洁,适合快速文字识别。文章还提供了下载链接及软件特点、界面展示等内容,便于用户根据需求选择合适的工具。
265 36
|
3月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
3月前
|
存储 安全 算法
Java 集合面试题 PDF 下载及高频考点解析
本文围绕Java集合面试题展开,详细解析了集合框架的基本概念、常见集合类的特点与应用场景。内容涵盖`ArrayList`与`LinkedList`的区别、`HashSet`与`TreeSet`的对比、`HashMap`与`ConcurrentHashMap`的线程安全性分析等。通过技术方案与应用实例,帮助读者深入理解集合类的特性和使用场景,提升解决实际开发问题的能力。文末附带资源链接,供进一步学习参考。
84 4
|
11月前
|
数据采集 Web App开发 JavaScript
Puppeteer自动化:使用JavaScript定制PDF下载
在现代Web开发中,自动化工具如Puppeteer可显著提升效率并减少重复工作。Puppeteer是一款强大的Node.js库,能够控制无头Chrome或Chromium浏览器,适用于网页快照生成、数据抓取及自动化测试等任务。本文通过示例展示了如何使用Puppeteer自动化生成定制化的PDF文件,并介绍了如何通过配置代理IP、设置user-agent和cookie等技术增强自动化过程的灵活性与稳定性。具体步骤包括安装Puppeteer、配置代理IP、设置user-agent和cookie等,最终生成符合需求的PDF文件。此技术可应用于报表生成、发票打印等多种场景。
409 6
Puppeteer自动化:使用JavaScript定制PDF下载
|
7月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
167 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
XML 缓存 JSON
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
为什么浏览器中有些图片、PDF等文件点击后有些是预览,有些是下载
515 0
|
11月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
2260 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
10月前
|
前端开发 API
前端界面生成PDF并导出下载
【10月更文挑战第21天】利用合适的第三方库,你可以在前端轻松实现界面生成 PDF 并导出下载的功能,为用户提供更方便的文档分享和保存方式。你还可以根据具体的需求进一步优化和定制生成的 PDF 文件,以满足不同的业务场景要求。
|
12月前
|
前端开发
Twaver-HTML5基础学习(37)network导出图片并下载
本文介绍了如何在Twaver-HTML5中将network导出为图片并提供下载,主要通过将network转换为canvas对象,然后转换为base64编码的图片进行展示和下载。
106 5
|
JavaScript 前端开发 程序员
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
JavaScript是Web标准语言,广泛应用于各类浏览器,造就了其最广泛部署的地位。Node.js的兴起扩展了JavaScript的使用场景,使其成为开发者首选语言。无论新手还是经验丰富的程序员,都能受益于学习JavaScript。[《JavaScript权威指南第7版》资源链接](https://zhangfeidezhu.com/?p=224)
887 5
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐