13

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();
 }
}

これにより、毎秒「未定義」が変更され続けます。印刷オプションは利用できません。何か案は?

4

4 に答える 4

15

1 週間ほど前にこの質問に報奨金を出しましたが、有効期限が切れています。将来これを見つける可能性のある人のために、多くの調査を行った後、ここで学んだことを投稿します。

PDF の表示は、ブラウザー、ブラウザーのバージョン、ブラウザーの構成、およびオペレーティング システムに基づいて異なります。多くの変数があるため、ここでは最も一般的な状況について説明します。

  • すべてのブラウザーで、Javascript を使用して任意の種類の print() メソッドを呼び出すことができず、PdfActions しか使用できませんでした。OPENACTION は print を呼び出します。これらを iText を使用して PDF に埋め込みました。

  • Chrome は Adob​​e のビューアーを使用します。このビューアーは、いかなる種類の print() メソッドにもアクセスできませんが、PDF に埋め込まれた PdfActions を実行します。そのため、「OpenAction」を PDF に埋め込んで、それらのアクションを確認するアプリケーションから PDF 呼び出しが開かれるたびに印刷することができます。

  • Firefox (特定のバージョン以上、ただし最近のすべてのバージョン) は Windows で Adob​​e ビューアーを使用し、PdfActions も認識します。ただし、OSX では、Adobe ビューアーのサポートが失われ、焼き付けられた Firefox ビューアー (pdf.js) に切り替わります。PdfActions をサポートしていません。

  • IE: IE についてはあまりテストしませんでした。主な理由は、Firefox が OSX で動作しなかったため、Javascript から PDF を印刷することをあきらめたためです (これは私にとって必要条件です)。

私のPDFは私が制御するサーバーによって生成されていたので、サーバーでサービスを変更し、PDF生成が使用するのと同じマークアップに基づいてPNGを生成するget PNGサービスを追加しました。ブラウザは、PDF よりもはるかに優れた画像処理を行います。PDF 生成サービスは、私のコードの他の場所で使用されているため、再利用できることを望んでいました。

質問には答えませんが、私が持っているすべての情報です。将来これを見つける可能性のある人への私の提案: この場合、可能であれば PDF を捨てて、よりシンプルにします。それ以外の場合は、OSX の FF プレビュー PDF ビューアで Javascript を介して print() を呼び出す方法を知っている場合は、この質問を更新してください。

-フィル

于 2014-11-20T19:14:21.363 に答える
2

Javascript では、これができるかどうかわかりません。ただし、pdf ファイルへのスクリプト インジェクションを使用して実現できます。私の理解が正しければ、これは Google が行うことです。

例えば。

  1. URL を開く : https://drive.google.com/viewerng/viewer?url=http://www.energy.umich.edu/sites/default/files/pdf-sample.pdf
  2. 次に、印刷アイコンをクリックします。
  3. ご覧のとおり、pdf に印刷コマンドが挿入された新しいウィンドウが開きます。PDFが読み込まれると、組み込みの印刷コマンドがトリガーされます。ページを更新するたびに、印刷がトリガーされたことを確認できます。これは、印刷動作​​がドキュメント読み込みイベントに関連付けられていることを意味します。

iTextSharp を使用して、上記の動作をシミュレートできます。

于 2014-11-18T07:27:59.340 に答える