EChartsは印刷がVueの中で遊んでいない白いフォントを実装しています。

はじめに:CSSのノードを取得少ないEChartsよりプラグインのためのVueにEChartsは、チャートを印刷しない独自のページの印刷を使用するとされます。プリントアウトの結果は空になります。オンラインリファレンス複数のドキュメントの後、手順の概要は、すべての人のために、ヘルプのビットを提供することを望んで、述べビットをセットします。
1.ファイルフォルダ内print.js Vueのプロジェクト、ファイルの内容を作成します。

//打印类属性、方法定义
/ * eslint-無効* /
constの印刷=機能(DOM、オプション){
  場合((このinstanceofは印刷)!)(DOM、オプション)新しい印刷を返します。
 
  this.options = this.extend({
    'NOPRINT': '.NO印刷'
  }、オプション)。
 
  IF((typeof演算DOM)=== "ストリング"){
    this.dom = document.querySelector(DOM)。
  }他{
    this.isDOM(DOM)
    this.dom = this.isDOM(DOM)?DOM:DOM $エル;。
  }
 
  this.init()。
}。
Print.prototype = {
  INIT:関数(){
    VAR含量= this.getStyle()+ this.getHtml()。
    this.writeIframe(コンテンツ)。
  }、
  伸びる:関数(OBJ、OBJ2)を{
    (OBJ2でのvar k)に対する{
      OBJ [K] = OBJ2 [K]。
    }
    OBJ返します。
  }、
 
  でgetStyle:関数(){
    VAR列str = ""
      スタイル= document.querySelectorAll( 'スタイル、リンク');
    以下のために(; I <styles.length; VAR iが0 = I ++){
      STR + =スタイル[I] .outerHTML。
    }
    STR + = "<スタイル>" +(this.options.notPrint this.options.notPrint: '.NO印刷'?)+ "{表示:なし;} </スタイル>"。
    STR + = "<スタイル> .results {幅:100%重要!;} .result .TITLE {幅:100%;} </スタイル>";
 
    STRを返します。
  }、
 
  getHtml:関数(){
    VAR入力= document.querySelectorAll( '入力')。

    VAR選択= document.querySelectorAll( '選択')。
    VAR遊説= document.querySelectorAll( 'キャンバス');
    用(VARのK = 0; K <inputs.lengthあり、k ++){
      IF(入力が== .TYPE [k]が入力|| == .TYPE "ラジオ" "チェックボックスを" [K]){
        IF(入力[K] {)==真.checkedを
          入力[K] .setAttribute( 'チェック'は、 "チェック")
        } {他
          の入力[K] .removeAttribute( '確認')
        }
      (入力[K] .TYPE == "場合そう}テキスト"){
        入力が入力[K] .VALUE)は、.setAttribute( '値を' [K]
      他{}
        入力が.setAttribute( '値'、入力[k]を[K]。


 

      IF(テキストエリア[K2] .TYPE == 'TEXTAREA'){
        テキストエリア[K2] .innerHTML =テキストエリア[K2] .VALUE
      }
    }
 
    のための(VAR K3 = 0; K3 <selects.length; K3 ++){
      IF(選択[ K3] .TYPE == 'を選択ワン'){
        VARの子=選択[K3] .children。
        (VAR I子で)のために{
          IF(子[I] .tagName == 'OPTION'){
            IF(子[I] .selected == TRUE){
              子が[i]は.setAttribute( '選択'、 "選択" )
            }他{
              子[I] .removeAttribute( '選択')
            }
          }
        }
      }
    }
    //キャンバスechars图表转为图片
    用(VAR K4 = 0; K4 <canvass.length; K4 ++){
      VAR imageURLに=キャンバス[K4] .toDataURL( "画像/ PNG")。
      VAR IMG =のdocument.createElement( "IMG");
      img.src = imageURLに。
      img.setAttribute( 'スタイル'、 'のmax-width:100%;');
      img.className = 'isNeedRemove'
      //キャンバス[K4] .style.display = 'なし'
      //キャンバス[K4] .parentNode.style.width = '100%'
      //キャンバス[K4] .parentNode.style.textAlign = '中央'
      キャンバス[K4] .parentNode.insertBefore(IMG、キャンバス[K4] .nextElementSibling)。
    }

    //做分页
    //スタイル= "改ページ-後:常に"
    VARページ= document.querySelectorAll( 'コンテンツ');

      ページ[K5] .setAttribute( 'スタイル'、 '改ページ-後:常に');
    }
    this.dom.outerHTMLを返します。
  }、
 
  writeIframe:機能(コンテンツ){
    VAR W、DOC、IFRAME =のdocument.createElement( 'IFRAME')、
      F = document.body.appendChild(IFRAME)。
    iframe.id = "myIframe"。
    //iframe.style = "位置:絶対;幅:0;高さ:0;上部:-10px;左:-10px;";
    iframe.setAttribute( 'スタイル'、 '位置:絶対;幅:' + document.querySelector( '#7')clientWidth + 'PX;高さ:0;トップ:-10px;左:-10px;');
    ワット= f.contentWindow || f.contentDocument;
    DOC = f.contentDocument || f.contentWindow.document;
    doc.open();
    doc.write(コンテンツ)。
    doc.close();
 
    VAR削除し= document.querySelectorAll( 'isNeedRemove');
    {(; K <removes.length K ++ VAR K = 0)のため
      削除し、[K] .parentNode.removeChild(削除[K])。
    }
 
    のvar _this =この
    iframe.onload =関数(){
      _this.toPrint(W)。
      setTimeout(関数(){
        document.body.removeChild(IFRAME)
      }、100)
    }
  }、
 
  toPrint:関数(frameWindow){
    試み{
      たsetTimeout(関数(){
        frameWindow.focus();
        試み{
          (frameWindow.documentなら! .execCommand( 'プリント'、偽、NULL)){
            frameWindow.print();
          }
        }キャッチ(E){
          frameWindow.print()。
        }
        frameWindow.close()。
      }、10);
    }キャッチ(ERR){
      にconsole.log( 'ERR'、ERR)。
    }
  }、
  isDOM:(typeof演算のHTMLElement === 'オブジェクト')?
    関数(OBJ){
      リターンOBJのinstanceofのHTMLElement。
    }
    関数(OBJ){
      リターンOBJ && typeof演算OBJ === 'オブジェクト' && obj.nodeType === 1 && typeof演算obj.nodeName === 'ストリング';
    }
}。
CONST MyPlugin = {}
MyPlugin.install =関数(ヴュ、オプション){
  // 4.添加实例方法
  Vue.prototype。


 
2.グローバルな使用が見つかりmain.jsに登録します。ここに私のコードです

インポート「./http/print」から印刷
Vue.use(印刷)
 
EChartsページでは3、彼のカスタム印刷方法

<EL-ボタンタイプ= "情報は、 " @ = "printTest()"プレーンをクリック> 印刷</ EL-ボタン> //印刷ボタン
printTest(){//印刷する方法を
    、この。$は、印刷(この。$ refs.print、 { 'notPrint': 'EL-ボタン、.EL-SELECT'})
            }
 
4.特別な注意事項:
print.js VARページ= document.querySelectorAll( 'コンテンツに '); 及びdocument.querySelector(「# 7 PX ')clientWidth +' ;高さ:0;トップ:-10px;左:-10px;「);
セレクタ独自のカスタムページを変更する#seven .content。

ここでの場所の私の選択接辞、我々はdivの中に上記の2つの入れ子のセレクタとの間の関係に注意を払う必要があります

<テンプレート>
    <DIV CLASS = "コンテンツ" ID = "印刷" REF = "印刷">
   <DIV CLASS = "ブロック">

     <EL-日付ピッカー
      Vモデル= "value2の"
      タイプ= "datetimerange"
      形式= "YYYY-MM-DD HH:MM:SS"
      :ピッカー・オプション= "pickerOptions"
      範囲セパレータ= "至"
      開始プレースホルダ= "开始日期"
      エンドプレースホルダ= "结束日期"
      >
    </ EL-日付ピッカー>

    <EL-ボタンタイプ= "情報"をクリックし@ = "DT()">查询</ EL-ボタン>
    <EL-ボタンタイプ=クリック= "printTest()"プレーン@ "情報">打印</ EL-ボタン>

  </ div>
        < - <Pクラス= "prompt_p">&NBSP;&NBSP;&NBSP;動的データのテスト</ P> - !>
        <divのスタイル= "高さ:580px;" ID = "七"> 
        </ DIV>
    </ DIV>
    
</テンプレート>
  
参考文献:
https://blog.csdn.net/shishuwei111/article/details/94167974#comments
彼も発現感謝のために!
----------------
免責事項:この記事は、元の記事のCSDNブロガー「元帥の国」で、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースとのリンクを添付してくださいこの文。
オリジナルリンクします。https://blog.csdn.net/qq_43251032/article/details/101281839

公開された273元の記事 ウォン称賛77 ビュー490 000 +

おすすめ

転載: blog.csdn.net/spt_dream/article/details/105158731