html转换到pdf

xml 复制代码
<head>
    <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>
</head>

不含分页,分页需要使用addImage单独处理

javascript 复制代码
// import htmlTo from './test.js'
const domToPdf = (function(){
    $('#downloadPDF').click(function() {
        const htmlToCanvas = function(){
            const options = {
                dpi: 192,  //dpi属性的值为192,表示图像的分辨率
                scale: 1, //scale属性的值为2,表示图像的缩放比例。
                loggging:true,
                allowTaint: true,//是否允许跨源图形污染画布
                useCORS: true,//是否允许跨域图像
            };
        
            let dom = document.querySelector('#pdfCtn');
            html2canvas(dom, options).then(canvas => {
                
                // 画布背景色
                // 在pdfCtn容器上定义

                // 转为base64
                let pageData = canvas.toDataURL('image/jpeg', 1.0);
                
                // 得到canvas画布的单位是px 像素单位
                let contentWidth = canvas.width;
                let contentHeight = canvas.height;
                
                // 设置PDF的尺寸
                // 设置pdf的尺寸,pdf要使用pt单位 已知 1pt/1px = 0.75   pt = (px/scale)* 0.75
                // 2为上面的scale 缩放了2倍
                const pdfX = (contentWidth + 10) / options.scale * 0.75
                const pdfY = (contentHeight + 500) / options.scale * 0.75 // 500为底部留白

                // 设置内容图片的尺寸,img是pt单位 
                const imgX = pdfX;
                const imgY = (contentHeight / options.scale * 0.75); //内容图片这里不需要留白的距离

                // 初始化jspdf 第一个参数方向:默认''时为纵向,第二个参数设置pdf内容图片使用的长度单位为pt,第三个参数为PDF的大小,单位是pt
                var PDF = new jsPDF('', 'pt', [pdfX, pdfY])

                // 将内容图片添加到pdf中,因为内容宽高和pdf宽高一样,就只需要一页,位置就是 0,0
                PDF.addImage(pageData, 'jpeg', 0, 0, imgX, imgY)
                PDF.save('测试.pdf')

            })
        }
        htmlToCanvas()
    });
})()
相关推荐
小李小李不讲道理1 小时前
「Ant Design 组件库探索」五:Tabs组件
前端·react.js·ant design
毕设十刻1 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
Source.Liu2 小时前
【PDF-rs】pdf子项目的lib.rs文件
pdf
mapbar_front2 小时前
在职场生存中如何做个不好惹的人
前端
牧杉-惊蛰2 小时前
纯flex布局来写瀑布流
前端·javascript·css
学会用脚编程3 小时前
word转Pdf,在window正常,放在linux服务器上就转出来中文是空白
pdf·word
一袋米扛几楼983 小时前
【软件安全】什么是XSS(Cross-Site Scripting,跨站脚本)?
前端·安全·xss
向上的车轮3 小时前
Actix Web适合什么类型的Web应用?可以部署 Java 或 .NET 的应用程序?
java·前端·rust·.net
XiaoYu20024 小时前
第1章 核心竞争力和职业规划
前端·面试·程序员
excel4 小时前
🧩 深入浅出讲解:analyzeScriptBindings —— Vue 如何分析 <script> 里的变量绑定
前端