vue 打印,html2canvas+iframe打印

print(){            
            const iframeEL=document.querySelector('.print-iframe');
            if(iframeEL){
              iframeEL.remove();
            }
            // 获取要转换为图片的 DOM 元素
            const element = document.querySelector('.safety-inspect-form');
     
            // 将 DOM 元素转换为 Canvas 对象
            html2canvas(element).then(canvas => {
              // 创建一个新的图片元素,并将 Canvas 对象作为背景图
              const img = new Image();
              img.src = canvas.toDataURL('image/png');
              img.style.width='100%'
              img.setAttribute("crossOrigin", "anonymous");
              // 在 iframe 文档中添加图片元素
              const iframe = document.createElement('iframe');
              iframe.style.display = 'none';
              iframe.style.width='100%'
              iframe.classList.add('print-iframe')
              document.body.appendChild(iframe)
              const doc = iframe.contentWindow.document
              doc.body.appendChild(img);
              //避免图片没有加载完成就打印
              setTimeout(()=>{
                iframe.contentWindow.print();
                document.body.removeChild(iframe);
              },50)    
            })
        }

若打印页面包含第三方图片,html2canvas转图片时会不显示,我的处理方式是将第三方图片转为base64显示。

getBase64(url, callback) {
            var Img = new Image(),
            dataURL = '';
            Img.src = url +"?v=" + Math.random();
            Img.setAttribute("crossOrigin", 'Anonymous') 
            Img.onload = function () { 
                var canvas = document.createElement("canvas"), 
                width = Img.width, 
                height = Img.height;
                canvas.width = width;
                canvas.height = height;
                canvas.getContext("2d").drawImage(Img, 0, 0, width, height); 
                dataURL = canvas.toDataURL('image/jpeg'); 
                callback ? callback(dataURL) : null; 
            };
        },

html2canvas:优点不会丢失页面样式。

Vue.js是一个前端JavaScript框架,主要用于构建用户界面。要在Vue应用中使用浏览器的打印功能打印照片,你可以通过HTML5的`<canvas>`元素获取图片数据,并将其转换为可以打印的内容。以下是一个简单的步骤: 1. **创建一个Canvas元素**: 首先,你需要在HTML中添加一个`<canvas>`标签,用于捕获图片数据: ```html <canvas id="print-canvas"></canvas> ``` 2. **绘制图片到Canvas**: 使用JavaScript获取图片元素,将它画到Canvas上: ```javascript const img = document.getElementById('your-image-id'); const canvas = document.getElementById('print-canvas'); const ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, canvas.width, canvas.height); ``` 3. **导出为Blob并打印**: 将Canvas内容转换为Blob对象,然后创建一个隐藏的iframe来触发打印: ```javascript function printImage() { const dataURL = canvas.toDataURL(); const blob = atob(dataURL.split(',')[1]); const url = window.URL.createObjectURL(new Blob([blob], {type: 'image/png'})); // 创建隐藏的iframe const iframe = document.createElement('iframe'); iframe.style.display = 'none'; document.body.appendChild(iframe); iframe.src = url; iframe.onload = () => { iframe.print(); iframe.remove(); // 移除iframe以释放资源 }; } // 调用函数打印照片 printImage(); ``` 请注意,这只是一个基本示例,实际应用中你可能需要处理更多情况,比如图片加载完成后再打印、提供更复杂的布局选项等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值