前提・実現したいこと
Webブラウザで、PDFが表示されると自動で印刷ダイアログが表示される様にしたいのですが、
読み込みに時間のかかる大きなファイル(1GB等)の場合には期待する動作が得られず困っています。
発生している問題
読み込みの完了を待ってから印刷メソッドを呼べばいいのですが、待つ方法が分かりません。
試したこと1
まず自動ではなく手動でなら可能か?
ということで、読み込み完了を待ってからボタンをクリックするコードを書きました。
結果、大きなファイルでも印刷ダイアログが表示されました。
Javascript
1<embed ID="example" src="test.pdf" type="application/pdf" width="800px" height="600px" > 2<input type="button" value="Print" onclick="ShowPrintDialog();" /> 3<script type="text/javascript"> 4 function ShowPrintDialog() 5 { 6 var pdf = document.getElementById("example"); 7 pdf.print(); 8 } 9</script>
試したこと2
onloadイベントハンドラが呼よばれないか?
呼ばれませんでした。
Javascript
1<embed ID="example" src="test.pdf" type="application/pdf" width="800px" height="600px" > 2<script type="text/javascript"> 3 var pdf = document.getElementById("example"); 4 pdf.onload = function() 5 { 6 pdf.print(); 7 } 8</script>
試したこと3
読み込み完了を待ってから印刷するサンプルがあったのでそれをやってみました。
小さなファイルはOKでしたが、大きなファイルではダイアログが表示されませんでした。
読み込みが完了する前に'undefined'ではなくなっています。
Javascript
1<embed ID="example" src="test.pdf" type="application/pdf" width="800px" height="600px" > 2<script type="text/javascript"> 3 printDocument("example"); 4 function printDocument(documentId) 5 { 6 var pdf = document.getElementById(documentId); 7 if (typeof doc.print === 'undefined') 8 { 9 setTimeout(function(){printDocument(documentId);}, 1000); 10 } 11 else 12 { 13 pdf.print(); 14 } 15 } 16</script>
試したこと4
PDFをblobに得てから表示したらAdobe PDF Readerアドオン内でのロード時間が劇的に短縮されてうまくいかないか?
と思いましたが、embedにblobで得たデータを渡す手法が分かりませんでした。
Javascript
1<script type="text/javascript"> 2 var request = new XMLHttpRequest(); 3 request.open("GET", "test.pdf", true); 4 request.responseType = "blob"; 5 request.onload = function (e) 6 { 7 if (this.status === 200) 8 { 9 var file = window.URL.createObjectURL(this.response); 10 var embed = document.createElement("embed"); 11 embed.src = this.response; // ここ?? 12 embed.type = "application/pdf"; 13 embed.width ="800px"; 14 embed.height ="600px"; 15 document.body.appendChild(embed); 16 17 // ここに印刷処理を書く 18 } 19 }; 20 request.send(); 21</script>
質問
- 他にPDFの読み込み完了をハンドルする方法はないでしょうか?
- embedにblobで得たデータを渡すことは可能でしょうか?
下記を条件としています
- 実行環境はIE+Adobe PDF Readerアドオンに限定。
すなわち、PDF.jsなどは利用できません。
2. PDFファイルにJavaScriptを埋め込むことはできません。
HTMLに書くJavaScriptのみでの解決を図っています。
(商用利用できるライブラリがあれば検討の余地はありますがiTextSharpは不可でした)
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/06 04:54