fanlinqiang

整个页面打印

mdn: window.print

window.print();

局部页面打印

参考: https://www.cnblogs.com/ljwsyt/p/9530525.html

  • jQuery插件如:jqprint插件
  • 仍使用window.print(),打印时使用样式控制,将不需要打印的内容隐藏<style media="print"><link media="print">的用法合理应用,media="print"是不被网页所显示的,只能在打印的效果上存在,可以设置出打印效果和在网页上所显示的不一样。此外也可以使用媒体查询属性@media print,如:
@media print
    .layout-aside
        display: none

vue 代码片段

import html2canvas from \'html2canvas\';
import download from \'download.js\'; // https://github.com/rndme/download
export default {
    methods: {
        getQRCodeImage () {
            return new Promise((resolve, reject) => {
                let dom = this.$refs[\'qr-code\'];
                if (dom) {
                    html2canvas(dom).then(function(canvas) {
                        resolve(canvas.toDataURL("image/png", 1.0));
                    });
                } else {
                    reject();
                }
            });
        },
        async handlePrint () {
            let dataUrl = await this.getQRCodeImage();
            let iframe = document.createElement(\'iframe\');
            Object.assign(iframe.style, {
                position: \'fixed\',
                \'z-index\': -999
            });
            let container = document.body;
            container.appendChild(iframe);

            let iframeContentWindow = iframe.contentWindow;
            let iframeDoc = iframeContentWindow.document;
            iframeDoc.write(`
                <style type="text/css" media="print">
                    body {
                        display: flex;
                        align-items: center;
                        justify-content: center;
                    }
                    img {
                        height: 305px;
                        width: 520px;
                    }
                </style>
                <img />
            `);
            let img = iframeDoc.querySelector(\'img\');
            img.onload = function () {
                iframeContentWindow.focus();
                iframeContentWindow.print();
                let timer = setTimeout(() => {
                    container.removeChild(iframe);
                    iframe = null;
                    clearTimeout(timer);
                });
            };
            img.src = dataUrl;
        },
        async handleDownload () {
            let dataUrl = await this.getQRCodeImage();
            download(dataUrl, `QR-${new Date().getTime()}`, \'image/png\');
        }
    }
};
</script>

分类:

技术点:

相关文章:

  • 2021-12-12
  • 2021-06-03
  • 2021-09-14
  • 2021-12-12
  • 2021-12-12
  • 2021-12-19
  • 2021-11-04
  • 2021-12-12
猜你喜欢
  • 2021-12-12
  • 2021-12-12
  • 2021-12-05
  • 2021-12-12
  • 2021-12-12
相关资源
相似解决方案