打印组件

Dec 21, 2021

打印element.ui的table表单

1,首先给需要打印的元素一个id

image-20221021222503430
image-20221021222503430

2,在点击打印按钮的时候调用方法,在方法中传入id

image-20221021222533133
image-20221021222533133

3,代码会拼接成一个新的页面,然后打开一个新的浏览器标签,预览打印,需要调整的地方,可以在表单的样式中调整。假如说不想打印表单的最后一列“操作”,可以复制一个新的表单,然后隐藏,给它id,把“操作”这列的代码删掉,打印出来就不会有“操作”这一列了。具体的可以看下代码。

   function PrintForm(id) {
    // 空页面
    let printStr = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'></head>";
    // 定义element-ui table组件的样式
    const tabStyle = `<style>
        table{width:150%;display:table-cell!important;box-sizing:border-box;table-layout:auto!important;}
        .el-table__header,.el-table__body,.el-table__footer{width:100%!important;border-collapse: collapse;text-align:center;}
        table,table tr th, table tr td { border:1px solid #ddd;color:#606266;word-wrap:break-word}
        table tr th,table tr td{padding:5 10px;word-wrap:break-word }
        .el-table__body, tr td .cell{width:100%!important}
        .el-table th.gutter{display: none;}
        .el-table colgroup.gutter{display: none;}
        </style><body>`;
    let content = "";
    // 获取名为传入id的 dom元素内的内容
    const html = document.getElementById(id).innerHTML;
    console.log(html)
    // 新建一个 DOM
    const div = document.createElement("div");
    const printDOMID = "printDOMElement";
    div.id = printDOMID;
    div.innerHTML = html;
    // 提取第一个表格的内容 即表头
    const ths = div.querySelectorAll(".el-table__header-wrapper th");
    const ThsTextArry = [];
    for (let i = 0, len = ths.length; i < len; i++) {
      if (ths[i].innerText !== "") ThsTextArry.push(ths[i].innerText);
    }
    // 删除多余的表头
    div.querySelector(".hidden-columns").remove();
    // 第一个表格的内容提取出来后已经没用了 删掉
    div.querySelector(".el-table__header-wrapper").remove();
    // 将第一个表格的内容插入到第二个表格
    let newHTML = "<tr>";
    for (let i = 0, len = ThsTextArry.length; i < len; i++) {
      newHTML +=
        '<td style="text-align: center; font-weight: bold">' +
        ThsTextArry[i] +
        "</td>";
    }
    newHTML += "</tr>";
    div.querySelector(".el-table__body-wrapper table").insertAdjacentHTML("afterbegin", newHTML);
    let str = div.querySelector(".el-table__body-wrapper").innerHTML
    console.log(str)
    // 拼接空页面+style样式+dom内容
    content = content + str;
    printStr = printStr + tabStyle + content + "</body></html>";
    // 打开新页面
    let pWin = window.open("_blank");
    // 将内容赋值到新页面
    pWin.document.write(printStr);
    // 使用setTimeout,等页面dom元素渲染完成后再打印。
    setTimeout(() => {
      pWin.print(); // 调用打印功能。
      pWin.close(); // 关闭 打印创建的当前页面
    }, 100);
  }
Back