js打印頁面部分內(nèi)容

直接用【print-js】實(shí)現(xiàn)打印,有些樣式不能正常識(shí)別特漩。所以用html2canvas將dom轉(zhuǎn)圖片再實(shí)現(xiàn)打印兼容性才是最好的督笆。
注意:利用html2canvas打印圖片,一行文本有可能中間被分割跨兩個(gè)頁面摄狱,這時(shí)需要用css設(shè)置div內(nèi)外邊距來解決。如果內(nèi)容不確定无午,這個(gè)問題很難解決媒役。純print-js打印html,又有很多css樣式錯(cuò)亂或不支持宪迟,只能調(diào)整css樣式解決兼容(工作量大)酣衷。

1.安裝兩個(gè)插件:

npm install print-js --save
npm install --save html2canvas 

【html2canvas】用法:(注)給dom設(shè)置width寬度(或添加類名控制打印時(shí)的樣式),再執(zhí)行畫布函數(shù)次泽。瀏覽器保存PDF文檔可視內(nèi)容也是710像素左右穿仪。

//html2canvas配置文檔:https://allenchinese.github.io/html2canvas-docs-zh-cn/docs/html2canvas-configuration.html
document.body.style.width = '710px';
html2canvas(document.body, {
  backgroundColor: '#ffffff',
}).then((canvas) => {
  // toDataURL 圖片格式轉(zhuǎn)成 base64
  let dataURL = canvas.toDataURL('image/png');
});

【print-js】用法:

//官網(wǎng)https://printjs.crabbly.com/
printJs({
  printable: base64_dataURL,// pdf or image url, html element id or json data object
  //printable:['https://www.baidu.com/img/flexible/logo/pc/result.png','https://www.baidu.com/img/flexible/logo/pc/result.png'],//支持多張圖片
  type: "image",
  maxWidth: 1000,
  base64: true,
  style: `@media print { @page {size: auto;} body{margin:0px 5px}}` // 解決出現(xiàn)多頁打印時(shí)第一頁空白問題
});

【element-ui + vue2】項(xiàng)目的實(shí)現(xiàn)打印的代碼:

<template>
  <div class="container">
    <div @click="handlePrint">打印按鈕</div>
    <div></div>
    <div id="BaseTableBox">要打印的內(nèi)容</div>
    <div></div>
  </div>
</template>
<script>
import printJs from "print-js"; //導(dǎo)入
import html2canvas from "html2canvas"; //導(dǎo)入
export default {
  data() {
    return {};
  },
  created() {},
  methods: {
    //打印
    handlePrint() {
      // const loading = this.$loading({
      //   lock: true,
      //   text: "正在啟動(dòng)打印",
      //   spinner: "el-icon-loading",
      //   background: "rgba(255, 255, 255, 1)",
      // });

      // let dom = this.$el.querySelector("#BaseTableBox");
      let dom = document.querySelector("#BaseTableBox");
      dom.classList.add("BaseTablePrint"); //添加打印的布局樣式
      let timer = setTimeout(() => {
        //添加class樣式不能馬上生效席爽,所以用定時(shí)器延遲,保證樣式生效后再用畫布繪制啊片。
        html2canvas(dom, {
          backgroundColor: "#ffffff",
        }).then((canvas) => {
          // loading.close();//關(guān)閉element-ui的加載遮罩
          // toDataURL 圖片格式轉(zhuǎn)成 base64
          let dataURL = canvas.toDataURL("image/png");
          //打印
          printJs({
            printable: dataURL,
            type: "image",
            maxWidth: 1000,
            base64: true,
            style: `@media print { @page {size: auto;} body{margin:0px 5px}}` // 解決出現(xiàn)多頁打印時(shí)第一頁空白問題
          });
          dom.classList.remove("BaseTablePrint"); //刪除打印的布局樣式
          clearTimeout(timer);
        });
      }, 300);
    },
  },
};
</script>

<style lang="scss">
.BaseTablePrint {
  //打印的樣式
  width:710px;
}
</style>

注意:【@media print】媒體查詢的樣式只锻,在edge瀏覽器中,只有用瀏覽器快捷式【Ctrl + P】啟動(dòng)打印print css樣式才會(huì)生效紫谷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末齐饮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笤昨,更是在濱河造成了極大的恐慌祖驱,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞒窒,死亡現(xiàn)場(chǎng)離奇詭異捺僻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)崇裁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門匕坯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拔稳,你說我怎么就攤上這事醒颖。” “怎么了壳炎?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逼侦。 經(jīng)常有香客問我匿辩,道長(zhǎng),這世上最難降的妖魔是什么榛丢? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任铲球,我火速辦了婚禮,結(jié)果婚禮上晰赞,老公的妹妹穿的比我還像新娘稼病。我一直安慰自己,他們只是感情好掖鱼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布然走。 她就那樣靜靜地躺著,像睡著了一般戏挡。 火紅的嫁衣襯著肌膚如雪芍瑞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天褐墅,我揣著相機(jī)與錄音拆檬,去河邊找鬼洪己。 笑死,一個(gè)胖子當(dāng)著我的面吹牛竟贯,可吹牛的內(nèi)容都是我干的答捕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屑那,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拱镐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起齐莲,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤痢站,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后选酗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阵难,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年芒填,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呜叫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殿衰,死狀恐怖朱庆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闷祥,我是刑警寧澤娱颊,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站凯砍,受9級(jí)特大地震影響箱硕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悟衩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一剧罩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧座泳,春花似錦惠昔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潮饱,卻和暖如春营罢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工饲漾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蝙搔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓考传,卻偏偏與公主長(zhǎng)得像吃型,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子僚楞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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