vue項(xiàng)目實(shí)現(xiàn)批量打印功能

一翅睛、功能背景

vue項(xiàng)目支持打印快遞面單功能,需進(jìn)行優(yōu)化支持一次打印多張面單黑竞;


打印面單.png

二捕发、實(shí)現(xiàn)思路

1.后臺(tái)配合提供一次獲取多張面單信息的接口;
2.獲取多張面單數(shù)據(jù)后很魂,通過v-for遍歷渲染dom扎酷,根據(jù)不同物流公司類型判斷展示不同面單結(jié)構(gòu);
3.為兼容不同項(xiàng)目框架遏匆,使用iframe調(diào)起打印法挨。組件dom添加iframe,點(diǎn)擊打印時(shí)將第二部渲染的dom嵌入當(dāng)前iframe的body中幅聘,調(diào)用print()方法凡纳;
4.因?yàn)槊鎲胃叨炔煌耆潭ǎ瑸榉乐鼓稠摮霈F(xiàn)半張面單的情況帝蒿,css限制最大高度并在每張單子之后增加分頁荐糜。

三、組件實(shí)現(xiàn)過程

express-sheet.vue

<template>
    <iframe id="print-iframe"></iframe>
   <div class="express-sheet" id="expressSheetCon">
         <div v-for="item in printArr" :key="item.printKey">
            <!-- 面單內(nèi)容-->
         </div>
    </div>
</template>
<script>
export default{
  name:'ExpressSheet',
  props: {
    //獲取面單內(nèi)容需要的參數(shù)
  },
  data:{
    printArr:[]
  },
  methods:{
    getSheetData:()=>{
      //獲取printArr內(nèi)容并進(jìn)行格式處理
    },
    //調(diào)起打印
    onPrint:()=>{
      let iframe = document.getElementById('print-iframe').contentWindow;
      addHeadStyle(iframe);   //添加樣式
      sheetPrint(iframe);     //嵌入打印dom 并調(diào)用打印
    }暴氏,
    addHeadStyle:()=>{
      let style = document.createElement('style');
      let styleText = ``;  //面單內(nèi)部樣式
      style.innerHTML = styleText;
      iframe.document.head.appendChild(style);
    },
    sheetPrint:()=>{
      let printDom = document.getElementById('expressSheetCon').outerHTML;
      iframe.document.body.outerHTML = printDom;
      iframe.print();
      printComplete();  //完成后通知父組件(回調(diào)丛版,并重置數(shù)據(jù))
    }
  }
}
</script>

四、組件使用方法

//引入組件
import { ExpressSheet } from 'components-package';    //components-package:項(xiàng)目組件庫(kù)
export default {
  //...,
  ExpressSheet
}
//printComplete方法自行定義
//  dom:
<div v-show="false">
    <express-sheet 
    :prop1="expressPrintData.prop1" 
    :prop2="expressPrintData.prop2" 
    @complete="printComplete"
    ></express-sheet>
  </div>

五偏序、遇到的問題及解決方式

  • 面單dom嵌入iframe之后無法獲取樣式
    將樣式寫在模板字符串中页畦,addHeadStyle方法append到iframe里面;
    或者也可以通過link方式研儒,將外部css文件引入放到iframe下豫缨,eg:
    let linkTag = document.createElement('link');
    linkTag.href ='./css/express-sheet.css'; 
    linkTag.setAttribute('rel','stylesheet');
    linkTag.setAttribute( 'type','text/css'); 
    iframe.document.head.appendChild(linkTag);
    
    但是該方法要求路徑須準(zhǔn)確,且打包后css文件可找到端朵,樣式不多的情況優(yōu)選當(dāng)前文件style嵌入方式
  • 半頁分頁處理
    每個(gè)面單最外層dom添加page-break-after樣式
  • 未打印時(shí)不顯示面單
    外層增加dom并設(shè)置隱藏(v-show='false')
  • 多次打印面單緩存或重復(fù)打印
    完成后回調(diào)好芭,重置數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市冲呢,隨后出現(xiàn)的幾起案子舍败,更是在濱河造成了極大的恐慌,老刑警劉巖敬拓,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邻薯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乘凸,警方通過查閱死者的電腦和手機(jī)厕诡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來营勤,“玉大人灵嫌,你說我怎么就攤上這事「鹱鳎” “怎么了寿羞?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)赂蠢。 經(jīng)常有香客問我绪穆,道長(zhǎng),這世上最難降的妖魔是什么客年? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任霞幅,我火速辦了婚禮,結(jié)果婚禮上量瓜,老公的妹妹穿的比我還像新娘司恳。我一直安慰自己,他們只是感情好绍傲,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布扔傅。 她就那樣靜靜地躺著耍共,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猎塞。 梳的紋絲不亂的頭發(fā)上试读,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音荠耽,去河邊找鬼钩骇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铝量,可吹牛的內(nèi)容都是我干的倘屹。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼慢叨,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼纽匙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拍谐,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤烛缔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后轩拨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體践瓷,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年气嫁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了当窗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寸宵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出元咙,到底是詐尸還是另有隱情梯影,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布庶香,位于F島的核電站甲棍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赶掖。R本人自食惡果不足惜感猛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望奢赂。 院中可真熱鬧陪白,春花似錦、人聲如沸膳灶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至序厉,卻和暖如春锐膜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弛房。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工道盏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人文捶。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓捞奕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拄轻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颅围,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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