3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kintone で SpreadJS を印刷

Posted at

#kintone で SpreadJS を印刷
SpreadJS は機能豊富ですが、印刷関連機能については、いまのところ見当たりません。
とりあえず、印刷できないか試してみました。

##kintone の標準印刷機能で SpreadJS を印刷
標準印刷機能では、何も表示されません。
SpreadJS は、canvas 上に描画されているためだと思われます。

#canvas をimage 変換して、印刷
簡易的な対策として、canvas をimage 変換して、印刷してみます。

詳細画面
image

スプレッドシートは、canvas 上に描画されている部分しか印刷されません。
まあ、そうですよね。

印刷イメージ
image

#スプレッドシートの表示サイズ変更後に印刷

表示サイズ変更後すぐに印刷処理を行うと、描画が間に合わないため、サイズ変更前の印刷でした。
描画を待つのも面倒なので、サイズ変更ボタンで追加して、印刷するしくみにしました。

サイズ拡張後の詳細画面
image

サイズ拡張後の印刷イメージ
image

残念ながら、PDF の表示は、それほどよくありません。あくまで簡易的な印刷ですね。
image

#JavaScript

IFRAME を作成して、スプレッドシートのCANVAS から IMAGE 変換して印刷しています。
サイズ変更は、height 変更後に再描画しても、うまくいかなかったため、再作成しています。

        if(event.type == "app.record.detail.show"){

            // 印刷ボタン
      		var btn1 = document.createElement('button');
      		btn1.setAttribute("id", "xp-btn-print1")
    		btn1.style.width="100px";
    		btn1.style.height="35px";		
    		btn1.style.align="center";
    		btn1.style.margin="0 0 0 10px";
        	btn1.appendChild(document.createTextNode('シート印刷'));
    		btn1.onclick =  function(){
    
                // 印刷用フレーム作成
    			var iframe = document.createElement('IFRAME');
    			var doc = null;
    			document.body.appendChild(iframe);
    			doc = iframe.contentWindow.document;
    
    			var strHtml = '<body>';
    			strHtml += '<h1 id="xp-title" style="margin: 5px;"></h1>';
    			strHtml += '<img id="xp-img1">';
    			strHtml += '</body>';
    
    		    doc.write(strHtml);
    			doc.close();
    			
    
                // スプレッドシートをpngに変換して、フレームにセット
                var cvs1Id = sspace1.id + 'vp_vp';
    			var cvs1 = window.document.getElementById(cvs1Id);
    			if(cvs1){
    				var img1 = doc.getElementById('xp-img1');
    				img1.src = cvs1.toDataURL();
    			}

                // タイトルセット
				var head1 = doc.getElementById('xp-title');
				head1.textContent = event.record['タイトル']['value'];

                // 印刷処理   
    			iframe.contentWindow.focus();
    			iframe.contentWindow.print();
    			document.body.removeChild(iframe);
    		}
    		kintone.app.record.getHeaderMenuSpaceElement().appendChild(btn1);

            // シート表示サイズ変更
      		var btn2 = document.createElement('button');
      		btn2.setAttribute("id", "xp-btn-print2")
    		btn2.style.width="100px";
    		btn2.style.height="35px";		
    		btn2.style.align="center";
    		btn2.style.margin="0 0 0 10px";
        	btn2.appendChild(document.createTextNode('サイズ'));
    		btn2.onclick =  function(){
    		    $(sspace1).empty();
                if($(sspace1).css("height") == "300px")
        			$(sspace1).css("height","900px");
                else
        			$(sspace1).css("height","300px");
                $(sspace1).wijspread();
                spread = $(sspace1).wijspread("spread");
                if(event.record['データ']['value']){
                    // インポート
                    spread.fromJSON(JSON.parse(event.record['データ']['value']));
                }
    		}
    		kintone.app.record.getHeaderMenuSpaceElement().appendChild(btn2);
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?