JS實(shí)現(xiàn)打印&下載功能

安裝:npm i html2canvas --save
安裝:npm i jspdf

const PrintOrDownload = (isPrint, targetDom, printCont, nameTitle) => {
  // 獲取節(jié)點(diǎn)高度,后面為克隆節(jié)點(diǎn)設(shè)置高度。
  let height = targetDom.height;
  // 克隆節(jié)點(diǎn)登下,默認(rèn)為false做粤,不復(fù)制方法屬性抹剩,為true是全部復(fù)制。
  let cloneDom = targetDom.cloneNode(true);
  // 設(shè)置克隆節(jié)點(diǎn)的css屬性,因?yàn)橹暗膶蛹?jí)為0,我們只需要比被克隆的節(jié)點(diǎn)層級(jí)低即可楼入。
  //cloneDom.style.backgroundColor = 'red';
  cloneDom.style.position = 'absolute';
  cloneDom.style.top = '0';
  cloneDom.style.index = '-1';
  cloneDom.style.padding = '40px 60px';
  cloneDom.style.height = height;
  // 將克隆節(jié)點(diǎn)動(dòng)態(tài)追加到body后面。
  document.getElementById(printCont)?.appendChild(cloneDom);
  // 插件生成base64img圖片牧抽。
  html2canvas(cloneDom, {
    useCORS: true,
    // 畫(huà)布開(kāi)始渲染的y坐標(biāo)位置
    y: 0,
  }).then((canvas) => {
    let contentWidth = canvas.width;
    let contentHeight = canvas.height;
    // 一頁(yè)pdf顯示html頁(yè)面生成的canvas高度;
    let pageHeight = (contentWidth / 592.28) * 841.89;
    // 未生成pdf的html頁(yè)面高度
    let leftHeight = contentHeight;
    // 頁(yè)面偏移
    let position = 0;
    // a4紙的尺寸[595.28,841.89]嘉熊,html頁(yè)面生成的canvas在pdf中圖片的寬高
    let imgWidth = 595.28;
    let imgHeight = (595.28 / contentWidth) * contentHeight;
    let pageData = canvas.toDataURL('image/jpeg', 1.0);
    // console.log('pageData', pageData);
    let pdf = new JsPDF(null, 'pt', 'a4');
    // 有兩個(gè)高度需要區(qū)分,一個(gè)是html頁(yè)面的實(shí)際高度扬舒,和生成pdf的頁(yè)面高度(841.89)
    // 當(dāng)內(nèi)容未超過(guò)pdf一頁(yè)顯示的范圍阐肤,無(wú)需分頁(yè)
    if (leftHeight < pageHeight) {
      pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight);
    } else {
      while (leftHeight > 0) {
        pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight);
        leftHeight -= pageHeight;
        // 避免添加空白頁(yè)
        position -= 841.89;
        if (leftHeight > 0) {
          pdf.addPage();
        }
      }
    }
    if (isPrint) {
      //打印
      // pdf.autoPrint()
      // pdf.output('dataurlnewwindow')
      var opener = window.open();
      var cont = document.getElementById(printCont).innerHTML;
      opener.document.write(cont);
      // setTimeout(() => {
      opener.print();
      // }, 1000)
    } else {
      //下載
      pdf.save(nameTitle || 'MyCoreHub' + '.pdf');
    }
    document.getElementById(printCont)?.removeChild(cloneDom);
  });
};

使用:
PrintOrDownload(true, pdfs.value, 'agreemnet-content', 'title值')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讲坎,隨后出現(xiàn)的幾起案子孕惜,更是在濱河造成了極大的恐慌,老刑警劉巖晨炕,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欧穴,死亡現(xiàn)場(chǎng)離奇詭異构罗,居然都是意外死亡懦趋,警方通過(guò)查閱死者的電腦和手機(jī)莽红,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)禀横,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)汉额,“玉大人蜡塌,你說(shuō)我怎么就攤上這事赦肃》崃瘢” “怎么了货邓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)四濒。 經(jīng)常有香客問(wèn)我换况,道長(zhǎng)职辨,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任戈二,我火速辦了婚禮舒裤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘觉吭。我一直安慰自己腾供,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布鲜滩。 她就那樣靜靜地躺著伴鳖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徙硅。 梳的紋絲不亂的頭發(fā)上榜聂,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音嗓蘑,去河邊找鬼须肆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脐往,可吹牛的內(nèi)容都是我干的休吠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼业簿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瘤礁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起梅尤,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柜思,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后巷燥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赡盘,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年缰揪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陨享。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钝腺,死狀恐怖抛姑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艳狐,我是刑警寧澤定硝,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站毫目,受9級(jí)特大地震影響蔬啡,放射性物質(zhì)發(fā)生泄漏诲侮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一箱蟆、第九天 我趴在偏房一處隱蔽的房頂上張望沟绪。 院中可真熱鬧,春花似錦空猜、人聲如沸近零。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)久信。三九已至,卻和暖如春漓摩,著一層夾襖步出監(jiān)牢的瞬間裙士,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工管毙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腿椎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓夭咬,卻偏偏與公主長(zhǎng)得像啃炸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卓舵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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