Web アプリケーションで、クライアント上で PDF ファイルを強制的に印刷することはできますか? ブラウザーがウィンドウ内で PDF を開くように構成されている場合、window.print() の呼び出しは機能すると思いますが、一部のブラウザー (私のものなど) は PDF を外部で開くように構成されています。
8 に答える
google docs が行う方法は、JavaScript を PDF に埋め込んで、Acrobat Reader またはその他の準拠リーダーに印刷するように指示することです。
ランダムな PDF でこれを行うには、PDF ツールキットが必要です。
<html>
<script language="javascript">
timerID = setTimeout("exPDF.print();", 1000);
</script>
<body>
<object id="exPDF" type="application/pdf" data="111.pdf" width="100%" height="500"/>
</body>
</html>
taeyoung の提案と同様に、iframe を使用して pdf をレンダリングし、次に contentWindow.print(); を使用できます。
httpヘッダーをapplication/pdfに設定してから、javascriptで新しいウィンドウを強制的に開き、そのように印刷することができます。しかし、誰が本当にそれをするでしょうか?私は今来てください。
シンプルで素晴らしいライブラリprintjs " http://printjs.crabbly.com " を使用できます。これは PDF ファイルを取得し、必要に応じて印刷ダイアログを表示せずに印刷します。以下の簡単な方法で実行できます。
<button type="button" onclick="printJS('docs/printjs.pdf')">
Print PDF
</button>
Javascript を使用してブラウザーから直接 PDF ドキュメントを印刷することはできません。Javascript 関数 window.print() はブラウザの印刷機能を使用しますが、これは必要なものではありません。Java Web Start を介して印刷を開始する目的を達成できます。生の PDF ドキュメントを引数として受け取る Java プログラムを実行できるように、PDF ドキュメントを jnlp に直接配置します。ブラウザではなくシステムで実行するようになったので、JAVA API を介して印刷ドライバと直接やり取りできます。これは非常に単純に見えますが、実際には、JAVA 印刷 API がファイルを入力として受け入れないためではなく、ava.awt.print.Pageable インターフェイスを実装する特定のデータ構造を受け入れるためです。
www.pdfprint.itにすべての作業を行うWeb サービスがあります。ここでは、公式ドキュメントから抜粋したスニペットを示します。
<?php
// 1. GET the jnlp file with curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pdfprint.it/printPdf?auth=XXXX");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return the transfer as a string
$jnlp = curl_exec($ch);
curl_close($ch);
$pdfDoc ="example.pdf";
//2. put in the jnlp your PDF document base64 encoded
$jnlp = str_replace("####", base64_encode(file_get_contents($pdfDoc)),$jnlp);
//3. echo the jnlp file
header('Content-type: application/x-java-jnlp-file');
echo $jnlp;
jnlp ファイルを取得し、PDF ドキュメントに入れて、jnlp をブラウザに送信するだけです。印刷を実行する Java プログラムは、Web サービスから直接ダウンロードされます。一部の印刷オプションをコピー、サイドなどとして設定することもできます
ファイルを強制的にプリンターに送信したいということですか? ユーザーのデバイスがプリンターに接続されていないという、意図しない結果の法則について考えていますか? BlackBerry かもしれませんし、Wi-Fi 接続のラップトップかもしれません。ユーザーが既定のプリンターに移動したくない場合はどうすればよいでしょうか?