前端實現(xiàn)打印-適用vue

前端在項目開發(fā)的過程中,可能會遇到需要打印的需求,那么如何用js實現(xiàn)調(diào)用打印機進行正確的打印呢?

直接上代碼:(新建一個js文件椎椰,便于復用)

 // 新建DOM,將需要打印的內(nèi)容填充到DOM
function getContainer(html) {
 // 清除打印沾鳄,具體方法往下拉
   cleanPrint();
   let container = document.createElement("div");
   container.setAttribute("id", "print-container");
   container.innerHTML = html;
   return container;
 }

// 設置打印樣式
function getStyle(myHeight) {
     // 新建的dom不需要在頁面展示
      let styleContent = `#print-container {
      display: none;
   }
   @media print {
      body > :not(.print-container) {
      display: none;
   }
   html,
   body {
      display: block !important;
      // 這個地方傳入咱們自己需要打印內(nèi)容設置的高度慨飘,就可以打印對應的張數(shù)
      height: ${myHeight};
   }
   #print-container {
      display: block;
   }
   // 我這里打印的是表格,所以設置了邊框
   .el-table {
     border: 1px solid #666666;
   }
   th {
     border: 1px solid #666666;
   }
   td {
     border: 1px solid #666666;
   }
 }`;
 let style = document.createElement("style");
 style.innerHTML = styleContent;
 return style;
}

// 清空打印內(nèi)容及DOM
function cleanPrint() {
  let div = document.getElementById('print-container')
  if (!!div) {
    document.querySelector('body').removeChild(div)
  }
}

// 打印機喚起及圖片完全加載后再調(diào)用打印方法
function getLoadPromise(dom) {
  let imgs = dom.querySelectorAll("img");
  imgs = [].slice.call(imgs);

  if (imgs.length === 0) {
    return Promise.resolve();
  }

  let finishedCount = 0;
  return new Promise(resolve => {
    function check() {
      finishedCount++;
      if (finishedCount === imgs.length) {
        resolve();
      }
    }
    imgs.forEach(img => {
      img.addEventListener("load", check);
      img.addEventListener("error", check);
    })
  });
}
// 拋出打印方法译荞,進行調(diào)用瓤的,接收兩個參數(shù),一個是需要打印的內(nèi)容吞歼,一個是打印內(nèi)容的高度(傳高度就可以避免只打印一頁的問題)
export default function printHtml(html, myHeight) {
  let style = getStyle(myHeight);
  let container = getContainer(html);

  document.body.appendChild(style);
  document.body.appendChild(container);

  getLoadPromise(container).then(() => {
    // 最重要的語法
    window.print();
    document.body.removeChild(style);
    document.body.removeChild(container);
  });
}

使用方法:

  1. 在需要打印的頁面調(diào)用可復用打印js文件

  2. 可觸發(fā)的事件圈膏,看個人需求,是點擊還是獲取焦點去調(diào)用下邊就好了

    doPrint() {
       // 取自己頁面需要打印內(nèi)容的標簽
       let printDocument = document.getElementById("printDocument");
       // 取出需要打印的內(nèi)容
      let printData = printDocument.innerHTML;
      // 調(diào)用打印方法篙骡,傳入打印內(nèi)容及需要打印內(nèi)容的高度稽坤,可自行調(diào)整最佳高度
       printHtml(printData, this.printTable.length * 50 + 250 + "px");
    }
    

經(jīng)試驗丈甸,目前未發(fā)現(xiàn)瀏覽器兼容問題,個人認為還是比較完美的尿褪,看到這篇文章的朋友覺得好的話給個贊睦擂,也可以提出你們的見解,實現(xiàn)更好的打印方法

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杖玲,一起剝皮案震驚了整個濱河市顿仇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摆马,老刑警劉巖臼闻,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異囤采,居然都是意外死亡述呐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門斑唬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來市埋,“玉大人黎泣,你說我怎么就攤上這事恕刘。” “怎么了抒倚?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵褐着,是天一觀的道長。 經(jīng)常有香客問我托呕,道長含蓉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任项郊,我火速辦了婚禮馅扣,結果婚禮上,老公的妹妹穿的比我還像新娘着降。我一直安慰自己差油,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布任洞。 她就那樣靜靜地躺著蓄喇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪交掏。 梳的紋絲不亂的頭發(fā)上妆偏,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音盅弛,去河邊找鬼钱骂。 笑死叔锐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的见秽。 我是一名探鬼主播掌腰,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼张吉!你這毒婦竟也來了齿梁?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肮蛹,失蹤者是張志新(化名)和其女友劉穎勺择,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伦忠,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡省核,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昆码。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片气忠。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赋咽,靈堂內(nèi)的尸體忽然破棺而出旧噪,到底是詐尸還是另有隱情,我是刑警寧澤脓匿,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布淘钟,位于F島的核電站,受9級特大地震影響陪毡,放射性物質(zhì)發(fā)生泄漏米母。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一毡琉、第九天 我趴在偏房一處隱蔽的房頂上張望铁瞒。 院中可真熱鬧,春花似錦桅滋、人聲如沸慧耍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜂绎。三九已至,卻和暖如春笋鄙,著一層夾襖步出監(jiān)牢的瞬間师枣,已是汗流浹背炕桨。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工株婴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留珊随,地道東北人寄猩。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像陨倡,于是被迫代替她去往敵國和親敛滋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 打印樣式 一兴革、添加打印樣式 為屏幕顯示和打印分別準備一個css文件绎晃,如下所示:用于屏幕顯示的css: 用于打印的...
    goodluckall閱讀 5,596評論 0 1
  • 值類型 (1)值類型賦值的時候不會相互影響 // 值類型let a = 100let b = aa = 200co...
    WEB前端含光閱讀 247評論 0 0
  • 導語:前段時間做某系統(tǒng)審核后臺,出現(xiàn)了審核人員截圖把內(nèi)容外泄露的情況杂曲,雖然截圖內(nèi)容不是特別敏感庶艾,但是安全問題還是不...
    李亞_45be閱讀 1,182評論 0 0
  • 簡述JavaScript起源起源于美國的Netscape公司,原名為LiveScript噪漾,后改為JavaScrip...
    3ab670b99521閱讀 2,989評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月硼砰,有人笑有人哭,有人歡樂有人憂愁怪与,有人驚喜有人失落夺刑,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,528評論 28 53