美文网首页
前端实现打印功能(筛选打印表格)

前端实现打印功能(筛选打印表格)

作者: 莫言_jc | 来源:发表于2019-02-21 13:50 被阅读0次
  • 前端实现打印也并没有那么难。起初是后端实现打印,前端调取接口,但无法实现单选框的样式,无法对数据进行筛选,这才选择前端实现打印
  1. 页面数据
  <!-- HTML部分 -->
  <table class="Btable" id="BtableA" border=.5 cellpadding="0" cellspacing="0">
        <thead>
            <tr>
                <th colspan="3" style="border:none;font-size:18px">票据类</th>
            </tr>
            <th class="printThA1">单据名称</th>
            <th class="printThA2">单据张数</th>
            <th class="printThA3">备注</th>
        </thead>
        <tbody id="type1"></tbody>
  </table>

  <!-- javascript部分-->
  let BodyTableList1=reponse.data.body
  let tableTr=''
      for(var i in BodyTableList1){
          tableTr=`
              <td id="1typeName`+i+`">`+BodyTableList1[i].typeName+`</td>
              <td><input type="text" id="1amount`+i+`" value="`+BodyTableList1[i].amount+`"></td>
              <td><input type="text" id="1remarks`+i+`" value="`+BodyTableList1[i].remarks+`"></td>
                   `
            // 获取tbody
           let type1=document.getElementById('type1')
            // 创建tr标签
           let tr1=document.createElement("tr"); 
           // 当amount数据为0时,添加noPrint(需要隐藏的tr)
           if(BodyTableList1[i].amount=='0'){
               tr1.setAttribute('class','noPrint')
            }
            tr1.innerHTML=tableTr
            type1.appendChild(tr1)
      }    
打印前.png

我这里将动态生成的数据放进tbody中,在生成数据时如果单据张数为0时,要给当前tr添加class="noPrint",在打印时不显示
注意: \color{red}{样式尽可能的不要写在标签上,由于打印时,是将页面指定的HTML代码添}
\color{red}{加到打印页面的,在打印时会将样式打印(这里的样式可能与预期样式不一致)}
2.打印

<!-- HTML部分 -->
// 打开一个新的浏览器窗口
var win = window.open('');
// 写入
win.document.write(`
<html>
    <head>
        <title>交接单</title>
    </head>
// 打印时将样式写入
    <style>
        .clearfix:after{
            content: "020"; 
            display: block; 
            height: 0; 
            clear: both; 
            visibility: hidden;  
        }
        .clearfix {
            zoom: 1; 
        }
        #detailePrintStyle{
            width:100%;
            height: 100%;
        }
        .printTitleSpan{
            width:100%;
            margin-bottom:10px;
        }
        .printTitleSpan .titleContent{
            float:left;
            margin-right:10px;
        }
        .printTitleSpan .contentStyle{
            min-width:100px;
            padding:0 5px;
            border-bottom:1px solid #ccc;
        }
        #detailePrintStyle #BtableA{
            border:none;
            margin-bottom:20px;
        }
        #detailePrintStyle #BtableA thead tbody{
            text-align:center;
            width:100%;
        }
        th{
            height:36px;
            line-height:36px;
        }
        tr{
            height:36px;
            line-height:36px;
        }
        .printThA1{
            width:200px;
        }
        .printThA2{
            width:170px;
        }
        .printThA3{
            width:400px;
        }
        input{
            border:none;
            text-align:center;
        }
        #detailePrintStyle .inputTxt{
            border-bottom: 1px solid #000;
        }
        .noPrint{
            display: none;
        }
    </style>
    <body>
        <div id="detailePrintStyle">`);

<!-- javascript部分-->
win.document.write(`
    <div class="printTitleSpan">
        <div class="clearfix" style="width:100%">
            <div class="titleContent">交出人:</div><div class="titleContent contentStyle">`+this.form.sendName+`</div>
            <div class="titleContent">接收人:</div><div class="titleContent contentStyle">`+this.form.receiveName+`</div>
        </div>
        <br>
        <div class="clearfix" style="width:100%">
            <div class="titleContent">交接时间:</div><div class="titleContent contentStyle">`+this.form.dateCode+`</div>
            <div class="titleContent">所属期间:</div><div class="titleContent contentStyle">`+this.form.periodCode+`</div>                 
        </div>
    </div>
`);
var tableToPrintA = document.getElementById('BtableA')
win.document.write(tableToPrintA.outerHTML);
win.document.write('</div></body></html>');
win.document.close();//在IE浏览器中使用必须添加这一句
win.focus();//在IE浏览器中使用必须添加这一句
win.print();
win.close();
打印后.png
对比打印前与打印后,将单据张数为0不打印
\color{red}{暂不考虑兼容性问题}

相关文章

  • 前端实现打印功能(筛选打印表格)

    前端实现打印也并没有那么难。起初是后端实现打印,前端调取接口,但无法实现单选框的样式,无法对数据进行筛选,这才选择...

  • 前端打印

    简单介绍一下前端打印的做法和一些问题 一、简介 前端打印即浏览器打印,是通过浏览器的打印功能来实现打印效果的做法。...

  • 前端实现打印功能

    打印样式 一、添加打印样式 为屏幕显示和打印分别准备一个css文件,如下所示:用于屏幕显示的css: 用于打印的...

  • 【vue学习】整合Lodop

    前端实现自动打印 批量打印 vue中使用lodop调用标签打印机 利用lodop打印控件轻松实现批量打印 本文主要...

  • 前端vue项目实现单页打印功能

    前端vue项目实现单页打印功能 vue-print-nb插件:这是用于打印,简单,快速,方便,轻便的指令包装。安装...

  • VUE框架下搭建在线Excel应用

    本项目实现功能:VUE框架中 嵌入表格控件SpreadJS,实现导入Excel、导出Excel、导出PDF、打印表...

  • vue实现打印功能(包括分页)

    最近项目中碰到一个需求,需要前端预览打印当前页面的表格,而且表格是动态渲染的,所以在打印的时候需要分页打印。 1....

  • CSS 打印功能

    相关资料参考: 如何在 css 中设置打印分隔页: 参考资料: CSS 打印 前端打印功能css print

  • 前端页面局部打印功能实现

    先看打印的效果 网上找到的实现如下: doPrint (){ //获取当前页的html代码 varbdhtml=w...

  • vue html页面打印功能vue-print

    vue项目中,HTML页面打印功能.在项目中,有时需要打印页面的表格, 在网上找了一个打印组件vue-print-...

网友评论

      本文标题:前端实现打印功能(筛选打印表格)

      本文链接:https://www.haomeiwen.com/subject/unxryqtx.html