web-dev-qa-db-ja.com

JavaScriptでPDFファイル印刷ダイアログを開くことができますか?

新しいウィンドウでWebページを開き、印刷ダイアログがポップアップするようにJavaScriptを追加する方法を知っています。 PDFファイルで同様のことを行う方法はありますか?

42
user83358

はい、できます...

PDFはJavascriptをサポートしています。 PHPで生成されたPDFが作成され、FPDFを使用して動作させることができたときに、自動印刷機能が必要でした。

http://www.fpdf.org/en/script/script36.php

33
Edward

私は通常 JavaScriptを使用してPDF(eHow.com) を印刷する方法、iframeを使用する方法に似た方法を実行します。

  1. 印刷トリガーを収容する機能...

    _function printTrigger(elementId) {
        var getMyFrame = document.getElementById(elementId);
        getMyFrame.focus();
        getMyFrame.contentWindow.print();
    }
    _
  2. ユーザーにアクセスを許可するボタン...

    onClickまたはaまたはbuttoninputまたは任意のもの)

    _<input type="button" value="Print" onclick="printTrigger('iFramePdf');" />
    _
  3. pDFを指すiframe ...

    _<iframe id="iFramePdf" src="myPdfUrl.pdf" style="display:none;"></iframe>
    _

ボーナスアイデア#1 -iframeを作成し、printTrigger();内のページに追加して、ユーザーが[印刷]ボタンをクリックするまでPDFが読み込まれないようにします、javascriptはiframeを攻撃し、印刷ダイアログをトリガーできます。


ボーナスアイデア#2 -[印刷]ボタンを無効にして、ユーザーがクリックした後、少しロードスピナーまたは何かを与えると、繰り返しクリックするのではなく、進行中の何かを知ることができます。

31
brandonjp

PDF自体-acrobat proをお持ちの場合は、ページタブに移動し、最初のページのサムネイルを右クリックして、ページのプロパティをクリックします。ウィンドウ上部の[トリガーを選択]で[ページを開く]を選択し、[アクションを選択]で[javascriptを実行]を選択し、javascriptウィンドウで次のように入力します。

this.print({bUI: false, bSilent: true, bShrinkToFit: true});

これにより、マシン上のデフォルトのプリンターとのダイアログなしでドキュメントが印刷されます。印刷ダイアログが必要な場合は、bUIをtrueに、bSilentをfalseに変更し、必要に応じて、パラメータを合わせて縮小を削除します。

PDFの自動印刷!

13
mheavers

Javascriptは多くの場合無効になっているため、javascriptの代わりにnamed actionを使用します。そうでない場合は警告が表示されます。

私のWebアプリケーションは、ゴーストスクリプトでPDFに変換されるポストスクリプトファイルを作成します。ユーザーがアプリケーション内で既に印刷をクリックしているため、自動的に印刷したい。上記の@DSimonの名前付きアクションに関する情報を使用して、これを解決する方法を調査しました。要約すると、pdfの正しい場所に文字列/Type /Action /S /Named /N /Printが挿入されます。

私は小さなユーティリティを書くことを考えていましたが、pdfを解析してルートノードを見つけ、/OpenActionを参照付きで挿入し、アクションを持つオブジェクトを挿入し、外部参照でバイトオフセットを再計算する必要があります。

しかし、私は pdfmark について知りました。これは、Adobeのdistillerまたはghostscriptによってpdfに変換されるイディオムをpostscript構文で表現するためのpostscriptの拡張です。

すでにghostscriptを使用しているので、あとはpostscriptファイルの最後に次を追加するだけです。

%AUTOPRINT
[ /_objdef {PrintAction} /type /dict /OBJ pdfmark
[ {PrintAction} << /Type /Action /S /Named /N /Print >> /PUT pdfmark
[ {Catalog} << /OpenAction {PrintAction} >> /PUT pdfmark

ghostscriptはアクションを作成し、リンクし、外部参照オフセットを計算します。 (追記では%はコメントで、PrintActionはオブジェクトの私の名前です)

PDFを見ると、これが作成されていることがわかります。

1 0 obj
<</Type /Catalog /Pages 3 0 R
/OpenAction  9 0 R
/Metadata 10 0 R
>>
endobj

9 0 obj
<</S/Named
/Type/Action
/N/Print>>endobj

1 0はオブジェクト1、リビジョン0、9 0はオブジェクト9、リビジョン0です。pdfトレーラーでは、ルートノードはオブジェクト1であると言います。ご覧のとおり、オブジェクト1、/OpenActionからの参照があり、オブジェクト9リビジョン0を実行します。

Ghostscriptを使用すると、pdfをポストスクリプト(pdf2ps)に変換し、上記のテキストを追加し、ps2pdfを使用してpdfに戻すことができます。この変換では、pdfに関するメタ情報が失われることに注意してください。これについてはこれ以上検索していません。

9
some

埋め込みコードの例:

<object type="application/pdf" data="example.pdf" width="100%" height="100%" id="examplePDF" name="examplePDF"><param name='src' value='example.pdf'/></object>

<script>
   examplePDF.printWithDialog();
</script>

ID /名前をだまさなければならない場合があります。 Adobe Readerを使用しています...

7
RandomGuy87

PDFファイルがどのように構成されているか(または仕様を読むのに少し時間をかけたい))がわかっている場合は、この方法で行うことができます。

カタログオブジェクトのOpenActionフィールドで名前付きアクション「印刷」を使用します。 「印刷」アクションは文書化されていませんが、Acrobat Readerおよび他の主要な読者のほとんどはそれを理解しています。このアプローチの素晴らしい利点は、JavaScriptの警告が表示されないことです。詳細はこちらをご覧ください: http://www.gnostice.com/nl_article.asp?id=157

さらに見やすくするために、リクエストを発信したページに戻るように読者に指示する2番目のアクションURIを追加しました。次に、[次へ]フィールドを使用して、このアクションを最初の名前付きアクションに添付しました。コンテンツの配置を「インライン」に設定すると、ユーザーが印刷リンクをクリックしたときに次のようになります。

  1. 同じタブでAdobe Readerを開き、ファイルをロードします
  2. すぐに印刷ダイアログが表示されます
  3. [印刷]ダイアログを閉じると([OK]または[キャンセル]を押すと)、ブラウザタブはWebページに戻ります

これらのすべての変更をRubyファイルとIOモジュールのみで十分に簡単に実行できました。PDF =外部ツールで生成し、既存のカタログセクションへの外部参照を実行し、新しいセクションをPDFに追加し、特別なOpenAction行を含む更新されたカタログオブジェクトと新しいアクションオブジェクト。

PDFのインクリメンタルリビジョン機能のため、これを行うために既存のデータを変更する必要はなく、最後に追加のセクションを追加するだけです。

4
DSimon

アクションメニューオプションを使用してこれを設定してみませんか?

次の手順を実行します。AcrobatProを使用している場合は、ページタブに移動し、最初のページのサムネイルを右クリックして、ページのプロパティをクリックします。ウィンドウの上部にある[アクション]タブをクリックし、[トリガーの選択]で[ページを開く]を選択します。選択アクションの下で'メニュー項目の実行'を選択します。 [追加]ボタンをクリックして、[ファイル]> [印刷]を選択し、[OK]をクリックします。もう一度[OK]をクリックしてPDFを保存します。

3
helpingout

prawn gem for Ruby on Railsを生成するためにPDFでは、次の追加のgemを使用して印刷ダイアログをアクティブにできます。

エビのプリント

2
Justin Tanner

別の解決策:

<input type="button" value="Print" onclick="document.getElementById('PDFtoPrint').focus(); document.getElementById('PDFtoPrint').contentWindow.print();">
1
Yasin Bikmazer