菊部打印

前端要實現局部打印 就是要把頁面的部分信息經過打印機打出來
主要依賴html2canvas這個三方工具 和 window.print原生的api
html2canvas:這個工具的主要做用是傳入dom來獲取這個dom的截屏
window.print:呼起打印機打印頁面
準備工做html

npm install --save html2canvas

具體使用
.vue部分前端

<div class="print">
      <p>須要打印的部分</p>
      <p>須要打印的部分</p>
      <p>須要打印的部分</p>
    </div>
    <div>
      <p>不會打印的部分</p>
      <p>不會打印的部分</p>
      <p>不會打印的部分</p>
    </div>
    <div class="print">
      <p>須要打印的部分</p>
      <p>須要打印的部分</p>
      <p>須要打印的部分</p>
    </div>

.js部分vue

print() {
      const domList = [...document.querySelectorAll(".print")]; // 須要打印的部分會給上標識的class名
      const imgList = [];
      const count = 0;
      const fn = () => {
        /**
         * 打開新頁 並append圖片進去 再調用新頁的打印就好了
         */
        const printWindow = window.open();
        imgList.forEach(img => {
          printWindow.document.body.append(img);
        });
        printWindow.print();
      };

      domList.forEach(dom => {
        // html2canvas不支持list 因此遍歷一下
        html2canvas(dom).then(canvas => {
          /**
           * html2canvas接受dom會生成canvas 把canvas轉成圖片 方便打印用
           */
          const base64 = canvas.toDataURL();
          const img = new Image();
          img.onload = function() {
            /**
             * 由於會打印多個部分就會生成多張圖片 還要有序 故有此操做
             */
            imgList[i] = this;
            count++;
            if (count >= domList.length) {
              fn();
            }
          };
          img.src = base64;
        });
      });
    },

重點解釋下爲何要這樣作?
若是直接在本頁面調用print方法會打印整個頁面 若是要實現局部打印就須要隱藏掉不須要的部分 麻煩的狠
那麼這樣作的優點就在於 不要繁瑣的配置 只需把要的打印的部分生成圖片 而後把生成的圖片扔到新開的頁裏 新開的頁面就只有須要打印的部分 這時調用新開頁的print方法 完美
最後打印的效果還能夠 反正產品是接受了 哈哈npm

相關文章
相關標籤/搜索