zoukankan      html  css  js  c++  java
  • 表格组件实现打印功能

    使用场景

    用户通过界面搜索出一组数据,仔细一看这组数据实在是太重要了,重要到需要向上汇报(拍马屁)。

    此时的用户可以选择: 抱着电脑 || 截图发送 || 发送链接和查询条件。

    但我们做为前端开发人员,是可以向用户提供另外一种选择: 将查询结果打印,以纸质的形式进行信息传递。有时候,实实在在拿在手里的东西更有感觉。

    无纸办公的情况就不反驳了,我们只是多出一种选择,而非必选。

    实现方式

    比如我们现在有这么一组很有价值的数据(敲黑板,这都是我努力码出来的那种自已都不愿意看的博文),现在要实现将这些博文打印的功能需要以下几个步骤。

    1、生成基础样式

    在网页中展示的表格效果总是五花八门,想打印到纸张上是需要调整下展现样式。这些样式以字符串行式先行存储,会在后面的步骤中使用到。

    const style = '<style>
    '
        + 'table{ 100%;border-collapse: collapse;border-spacing: 0;}
    '
        + 'th,td{height: 18px;padding:11px;border: 1px solid #999;font-size: 12px;color: #666;}
    '
        + 'th{color: #333}
    '
        + 'a{color: #666; text-decoration:none;}
    '
        + 'tr[empty-template] td{text-align: center}
    '
    + '</style>';
    复制代码

    为什么不用模板字符串?因为这种情况下通过模板字符串添加的style会多出不必要的换行与空格,完全没有必要先使用模板字符串再用正则replace

    2、打开一个新的窗口

    const printWindow = window.open(); 
    复制代码

    是的,这一步就这么简单。(感觉可以和第三步合并?)

    3、打印

    如果原table没有需要移除的结构或样式,直接打印即可。

    // 这里我们假设table是需要打印的那个表格, style就是第一步中拼接的样式
    printWindow.document.write(style + table.outerHTML);
    printWindow.document.close();
    printWindow.print();
    printWindow.close();
    复制代码

    那如果原table存在复杂的结构或样式需要清除,那么就需要手动清理一份干净的element outerHTML了。

    以下是打印预览时的效果:

    相关实现

    在表格组件GridManager中实现了该功能,方式有点差异。点击这里查看源码


    作者:写个程序换个饼
    链接:https://juejin.cn/post/6882701592647172109
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    openCV中cvSnakeImage()函数代码分析
    程序所有重构,升级的目标(备注,更新)
    基础总结篇之中的一个:Activity生命周期
    Tomcat全攻略
    VRRP协议具体解释
    二叉树三种遍历(递归以及非递归实现)
    AssertValid函数学习
    java定时器的使用(Timer)
    循环队列
    使用Heartbeat实现双机热备
  • 原文地址:https://www.cnblogs.com/love314159/p/14229381.html
Copyright © 2011-2022 走看看