PDFファイルがあり、Javascriptで印刷しようとしています。この埋め込みトリックを試しました: 埋め込みPDFのサイレント印刷 ただし、印刷関数は次のようになりません。利用可能で、常に未定義です。
私はこのコードでIframeトリックを試しました:
function printPDF() {
if(document.getElementById("pdfDocument").contentWindow.document.readyState === "complete") {
document.getElementById("pdfDocument").focus();
document.getElementById("pdfDocument").contentWindow.print();
} else {
setInterval(printPDF(), 1000);
}
}
(pdfDocumentはiframeのIDです)これは印刷ダイアログをポップアップしますが、空白のページを印刷します。埋め込みタグの動作方法が気に入っています。しかし、なぜ印刷機能が利用できなくなるのでしょうか。
このテーマに関する投稿のほとんどはかなり古いものです。それを行うための最良のHTML5/jQueryの方法は何ですか? (またはこの時点では通常のJS)
編集:
埋め込みタグのJSコードは次のとおりです。
function printPDF() {
alert(document.getElementById("pdfDocument").print);
//Wait until PDF is ready to print
if (typeof document.getElementById("pdfDocument").print == 'undefined') {
setTimeout(function(){printPDF();}, 1000);
} else {
var x = document.getElementById("pdfDocument");
x.print();
}
}
これは毎秒「未定義」を変更し続けます。印刷オプションは使用できません。何か案は?
私は一週間かそこら前にこの質問に賞金をかけました、そしてそれは期限切れになりました。これを見つけるかもしれない将来の誰かのためにたくさんの研究の後に私がここで学んだことを投稿するつもりです。
PDFは、ブラウザ、ブラウザのバージョン、ブラウザの構成、およびオペレーティングシステムに基づいて異なる方法で表示されます。変数はたくさんあるので、ここで最も一般的な状況について説明します。
すべてのブラウザーで、Javascriptを介してprint()メソッドを呼び出すことができず、PdfActionsしか使用できませんでした。 OPENACTIONはprintを呼び出します。これらをiTextを使用してPDFに埋め込みました。
ChromeはAdobeのビューアを使用します。このビューアは、print()メソッドへのアクセスを許可しませんが、PDFに埋め込まれたPdfActionを実行します。したがって、「OpenAction」をPDFに埋め込み、それらのアクションを参照するアプリケーションから開くたびにPDF呼び出しprintを実行することができます。
Firefox(特定のバージョンより上、ただし最近のすべてのバージョン)は、WindowsのAdobeビューアを使用します。AdobeビューアはPdfActionsも認識します。ただし、OSXでは、Adobeビューアのサポートが失われ、Firefoxビューア(pdf.js)で焼き付けられたものに切り替わります。これはPdfActionsをサポートしていません。
IE:IEではあまりテストしていません。 FirefoxがOSXで動作しなくなった後、JavascriptからPDFを印刷することをあきらめたことが主な理由です(私にとっては必須です)。
私のPDFは私が管理するサーバーによって生成されていたので、サーバーでサービスを変更し、PDF generationが使用するのと同じマークアップに基づいてPNGを生成するgetPNGサービスを追加することになりました。 。ブラウザは、私が知っていたPDFよりもはるかに優れた画像を処理しますが、コードの他の場所で使用されているため、PDF生成サービスを再利用できることを望んでいました。
それは質問に答えませんが、それは私が持っているすべての情報です。将来これを見つける可能性のある人への私の提案:ditch PDFこの場合は可能であれば、もっと簡単にしてください。それ以外の場合は、Javascriptを介してprint()を呼び出す方法を知っている場合は、この質問を更新してくださいOSXのFFプレビューPDFビューア。
-フィル
Javascriptでは、これができるかどうかわかりません。ただし、PDFファイルへのスクリプトインジェクションを使用して実現できます。私の理解が正しければ、これはグーグルがしていることです。
例えば。
ITextSharpを使用して、上記の動作をシミュレートできます。
(外部アプリケーションを埋め込む代わりに)ブラウザーでPDF全体をレンダリングする方法があります。これにより、PDFに関するブラウザーAPIへのフルアクセスが可能になります。
これはJavaScriptでのMozillaのpdf実装です: https://github.com/mozilla/pdf.js/
そしてこれがショーケースです: http://mozilla.github.io/pdf.js/web/viewer.html (右上の印刷ボタンに注意してください)。
仕組みの詳細については、こちらのビューアコードを確認してください: https://github.com/mozilla/pdf.js/blob/master/web/viewer.js
マイナス面—単に埋め込むよりもはるかに難しいでしょう。
プラス面では、実際に機能します。
Chromeで実行できます:
var toolbar = document.querySelector('#toolbar');
toolbar.shadowRoot.querySelector('#print').click();