天天看點

vue項目中遇到的列印,以及處理重新排版後不顯示echarts圖檔問題。

1. 項目中用到的列印

頁面:

vue項目中遇到的列印,以及處理重新排版後不顯示echarts圖檔問題。

css: 控制好寬度一般A4 我調試的是794px多了放不下,小了填不滿。當時多頁列印的時候,一定要控制好每一個頁面内容顯示的高度不要超過一個頁面,當然根據自己項目來。

由于我的項目是每一個頁面固定一個頁尾部,是以當顯示的時候正常排版顯示。但是一旦點選了列印預覽需要修改這個區域的css讓他固定在每一個頁面的底部。

vue項目中遇到的列印,以及處理重新排版後不顯示echarts圖檔問題。
vue項目中遇到的列印,以及處理重新排版後不顯示echarts圖檔問題。

js代碼,點選列印後執行(如果右鍵點選列印就會亂,是以給一個列印預覽按鈕讓使用者直接點):列印前先給要列印區域排版,這樣預覽列印的時候就不會亂,隻列印要列印的内容。然後延遲調用系統的列印預覽後即便使用者沒有列印,頁面已經排好版了 這個時候右鍵列印也是可以的了。

print(){
        var that = this;
        $('.operatorBox').css({ //從新繪制這塊區域讓它固定在每一個頁面底部
            'position':'fixed',
            'bottom':'15px'
        })//此方法僅限單頁
        var div_print = document.getElementById('print-area');
        var newstr = div_print.innerHTML;
        var oldstr = document.body.innerHTML;
        document.body.innerHTML = newstr;
        // that.showCharts()
        // console.log(this.imgBase)
        // 吧charts圖表弄成圖檔,在挨邊替換空白圖表
        /* Object.keys(this.imgBase).forEach(function(key){
            document.getElementById(key).innerHTML="<img style='width:100%' src="+that.imgBase[key]+">"
        });  */    

        setTimeout(function(){
            window.print(); 
            alert('如未列印,請右鍵選擇列印!')
            // window.location.reload();
            // document.body.innerHTML = oldstr;
        },1000)
    }      

效果:

vue項目中遇到的列印,以及處理重新排版後不顯示echarts圖檔問題。

取消列印後頁面排版已經改變了:

vue項目中遇到的列印,以及處理重新排版後不顯示echarts圖檔問題。

2. echarts列印,echarts如果是直接列印沒問題,但是大多數情況是需要重新排列要列印的(就是不直接列印頁面顯示的,需要自定義列印内容),自定義列印的時候需要拿到要列印的html從新排版,但是這個時候拿不到echarts生成的圖的,會顯示空白。

是以解決方案是利用echarts的轉成圖檔功能,提前把canvas圖表轉成圖檔,記錄下來然後在從新排列的時候從新替換,或者是當echarts生成圖檔的時候立馬換掉(這樣處理顯示效果不好)。

下面我的處理是把得到的圖檔全部按照echarts的id記錄到一個對象裡面,到時候在統一擷取: