实现el-table打印功能,样式对齐,去除滚动条

实现el-table打印功能,样式对齐,去除滚动条

复制代码
// 整个页面打印
function printTable(id) {
  // let domId = '#js_index'
  // if (id) {
  //   domId = `#${ id }`;
  // }
  // let wpt = document.querySelector(domId);
  // let newContent = wpt.innerHTML;
  // let oldContent = document.body.innerHTML;
  // document.body.innerHTML = newContent;
  // window.print(); //打印方法
  // history.go(0);
  // document.body.innerHTML = oldContent;

  if (id) {
    // 获取打印DOM
    let el = document.getElementById(id);
    // 当前页面样式
    let headDom = document.getElementsByTagName("head")[0];
    // 创建iframe
    let iframe = document.createElement("iframe");
    // 设置iframe样式
    iframe.setAttribute("id", id);
    iframe.setAttribute(
      "style",
      "position:absolute;width:0px;height:0px;left:-500px;top:-500px;"
    );
    // 在页面插入iframe
    document.body.appendChild(iframe);
    // 获取iframe内的html
    let doc = iframe.contentWindow.document;

    // 经需要打印的DOM插入iframe
    let printMain = document.createElement("div");
    printMain.setAttribute("id", id);
    printMain.innerHTML = el.innerHTML;
    doc.body.appendChild(printMain);
    // 设置iframe内的header,添加样式文件
    setTimeout(() => {
      doc.getElementsByTagName("head")[0].innerHTML = headDom.innerHTML;

      const table = doc.querySelectorAll('.el-table__header,.el-table__body');
      const table1 = doc.querySelectorAll('.el-table');
      const table2 = doc.querySelectorAll('.el-table__body-wrapper');
      for (let i = 0; i < table2.length; i++) {
        const tableItem = table2[i];
        console.log(tableItem);
        tableItem.style.maxHeight = 'unset';
      }
      for (let i = 0; i < table1.length; i++) {
        const tableItem = table1[i];
        console.log(tableItem);
        tableItem.style.maxHeight = 'unset';
      }
      setTimeout(() => {
        //el-table 打印不全的问题
        for (let i = 0; i < table.length; i++) {
          const tableItem = table[i];
          console.log(table1);
          tableItem.style.width = '100%';
          const child = tableItem.childNodes;
          for (let j = 0; j < child.length; j++) {
            const element = child[j];
            if (element.localName == 'colgroup') {
              element.innerHTML = '';
            }
          }
        }
        setTimeout(function () {
          iframe.contentWindow.focus();
          iframe.contentWindow.print();
          // 关闭iframe
          doc.close();
          document.body.removeChild(iframe);
        }, 1000);
      }, 1000)
    }, 0)
  } else {
    window.print(); //打印方法
  }
}
相关推荐
jamison_19 天前
文心一言与 DeepSeek 的竞争分析:技术先发优势为何未能转化为市场主导地位?
人工智能·ai·chatgpt·gpt-3·1024程序员节
NaZiMeKiY9 天前
HTML5前端第六章节
前端·html·html5·1024程序员节
jamison_114 天前
颠覆未来:解锁ChatGPT衍生应用的无限可能(具体应用、功能、付费模式与使用情况)
ai·chatgpt·1024程序员节
NaZiMeKiY19 天前
HTML5前端第七章节
1024程序员节
earthzhang202122 天前
《Python深度学习》第四讲:计算机视觉中的深度学习
人工智能·python·深度学习·算法·计算机视觉·numpy·1024程序员节
明明真系叻1 个月前
2025.3.2机器学习笔记:PINN文献阅读
人工智能·笔记·深度学习·机器学习·1024程序员节·pinn
bitenum1 个月前
【C++/数据结构】队列
c语言·开发语言·数据结构·c++·青少年编程·visualstudio·1024程序员节
IT学长编程1 个月前
计算机毕业设计 基于SpringBoot的智慧社区管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
java·spring boot·后端·毕业设计·课程设计·论文笔记·1024程序员节
qq_382391332 个月前
WPF框架学习
学习·wpf·1024程序员节
✿ ༺ ོIT技术༻2 个月前
Linux:TCP和守护进程
linux·运维·服务器·网络·tcp/ip·1024程序员节