質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

9337閲覧

WebブラウザでPDFの印刷ダイアログを自動表示

nishifx

総合スコア4

印刷

印刷とは、インキを用いて紙などの被印刷物に機械的に複製することを指します。現在は紙などの2次元の媒体だけでなく、3次元の曲面にも直接印刷する技術など様々な開発が進んでいます。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/10/04 07:57

前提・実現したいこと

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>

質問

  1. 他にPDFの読み込み完了をハンドルする方法はないでしょうか?
  2. embedにblobで得たデータを渡すことは可能でしょうか?

下記を条件としています

  1. 実行環境はIE+Adobe PDF Readerアドオンに限定。

  すなわち、PDF.jsなどは利用できません。
2. PDFファイルにJavaScriptを埋め込むことはできません。
HTMLに書くJavaScriptのみでの解決を図っています。
(商用利用できるライブラリがあれば検討の余地はありますがiTextSharpは不可でした)

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

https://stackoverflow.com/questions/54824015/on-load-event-not-triggering-for-object-tag

iframeでPDF表示させて、iframeのloadイベント拾うことで行けそうです。
が、IE動かす環境無いので確認できてません。

  • iframe内でAdobe PDF Readerアドオン動くのか?
  • そもそもアドオンに制御移った時点でloadイベント拾えない気がします。

一度お試し下さい。

投稿2019/10/04 14:18

oikashinoa

総合スコア2826

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nishifx

2019/10/06 04:54

ご回答ありがとうございます。 残念ながらイベントは発生しませんでした…… ちなみにですが Chromeでは、PDF読み込み開始(の辺り)でイベントが発生。 Firefoxでは、PDF読み込みの途中(プログレスバーがある程度進んだところ)でイベントが発生。 となりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問