新しいウィンドウでWebページを開き、印刷ダイアログがポップアップするようにJavaScriptを追加する方法を知っています。 PDFファイルで同様のことを行う方法はありますか?
はい、できます...
PDFはJavascriptをサポートしています。 PHPで生成されたPDFが作成され、FPDFを使用して動作させることができたときに、自動印刷機能が必要でした。
私は通常 JavaScriptを使用してPDF(eHow.com) を印刷する方法、iframe
を使用する方法に似た方法を実行します。
_function printTrigger(elementId) {
var getMyFrame = document.getElementById(elementId);
getMyFrame.focus();
getMyFrame.contentWindow.print();
}
_
(onClick
またはa
またはbutton
のinput
または任意のもの)
_<input type="button" value="Print" onclick="printTrigger('iFramePdf');" />
_
_<iframe id="iFramePdf" src="myPdfUrl.pdf" style="display:none;"></iframe>
_
ボーナスアイデア#1 -iframe
を作成し、printTrigger();
内のページに追加して、ユーザーが[印刷]ボタンをクリックするまでPDFが読み込まれないようにします、javascriptはiframeを攻撃し、印刷ダイアログをトリガーできます。
ボーナスアイデア#2 -[印刷]ボタンを無効にして、ユーザーがクリックした後、少しロードスピナーまたは何かを与えると、繰り返しクリックするのではなく、進行中の何かを知ることができます。
PDF自体-acrobat proをお持ちの場合は、ページタブに移動し、最初のページのサムネイルを右クリックして、ページのプロパティをクリックします。ウィンドウ上部の[トリガーを選択]で[ページを開く]を選択し、[アクションを選択]で[javascriptを実行]を選択し、javascriptウィンドウで次のように入力します。
this.print({bUI: false, bSilent: true, bShrinkToFit: true});
これにより、マシン上のデフォルトのプリンターとのダイアログなしでドキュメントが印刷されます。印刷ダイアログが必要な場合は、bUIをtrueに、bSilentをfalseに変更し、必要に応じて、パラメータを合わせて縮小を削除します。
PDFの自動印刷!
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に関するメタ情報が失われることに注意してください。これについてはこれ以上検索していません。
埋め込みコードの例:
<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を使用しています...
PDFファイルがどのように構成されているか(または仕様を読むのに少し時間をかけたい))がわかっている場合は、この方法で行うことができます。
カタログオブジェクトのOpenActionフィールドで名前付きアクション「印刷」を使用します。 「印刷」アクションは文書化されていませんが、Acrobat Readerおよび他の主要な読者のほとんどはそれを理解しています。このアプローチの素晴らしい利点は、JavaScriptの警告が表示されないことです。詳細はこちらをご覧ください: http://www.gnostice.com/nl_article.asp?id=157
さらに見やすくするために、リクエストを発信したページに戻るように読者に指示する2番目のアクションURIを追加しました。次に、[次へ]フィールドを使用して、このアクションを最初の名前付きアクションに添付しました。コンテンツの配置を「インライン」に設定すると、ユーザーが印刷リンクをクリックしたときに次のようになります。
これらのすべての変更をRubyファイルとIOモジュールのみで十分に簡単に実行できました。PDF =外部ツールで生成し、既存のカタログセクションへの外部参照を実行し、新しいセクションをPDFに追加し、特別なOpenAction行を含む更新されたカタログオブジェクトと新しいアクションオブジェクト。
PDFのインクリメンタルリビジョン機能のため、これを行うために既存のデータを変更する必要はなく、最後に追加のセクションを追加するだけです。
アクションメニューオプションを使用してこれを設定してみませんか?
次の手順を実行します。AcrobatProを使用している場合は、ページタブに移動し、最初のページのサムネイルを右クリックして、ページのプロパティをクリックします。ウィンドウの上部にある[アクション]タブをクリックし、[トリガーの選択]で[ページを開く]を選択します。選択アクションの下で'メニュー項目の実行'を選択します。 [追加]ボタンをクリックして、[ファイル]> [印刷]を選択し、[OK]をクリックします。もう一度[OK]をクリックしてPDFを保存します。
別の解決策:
<input type="button" value="Print" onclick="document.getElementById('PDFtoPrint').focus(); document.getElementById('PDFtoPrint').contentWindow.print();">