プレビューなしでWebアプリから印刷できるように、pdf-print-proxyを作りました。
Spring BootでPDFファイルをREST APIで受取り、WindowsはPDFtoPrinter.exeを、Mac、Linuxはlprを呼び出します。
各ローカルコンピュータにインストールして使います。インストーラーはjpackageでつくります。
Mac、Linuxはrootユーザーでサービスとして動きます。
Windwosもサービスにしてみましたが、ここなどによると、ネットワークプリンターはSYSTEMアカウントではつかえないようです。 jpackageでは、サービスでないと自動起動でインストールできないようなので、アイコンクリックで起動し、システムトレイのアイコンから止めます。必要なら自分でスタートアップフォルダに入れてください。
動作確認
curl http://localhost:6753
でプリンターのリストが返ってきます。
data.jsonのprinterNameを編集して、
curl http://localhost:6753 -d '@data.json' -H 'Content-Type: application/json'
とすると、印刷できます。
サンプルWebアプリ
sampleフォルダーにサンプルWebアプリがあります。
mvn spring-boot:run
で、ポート8080でWeb Serverが動きます。
ポートを変えたいときには、
mvn spring-boot:run "-Dspring-boot.run.jvmArguments=-Dserver.port=<port>"
とします。
また、
mvn package
で、jarを作り
java -jar target/pdf-print-proxy-sample-<version>-exec.jar
で、実行もできます。ポートを変えるときには、
java -Dserver.port=<port> -jar target/pdf-print-proxy-sample-<version>-exec.jar
とします。
ブラウザで、http://localhost:8080/sample.html にアクセスしてください。
サンプルの本体は、
src/main/resources/static
にあります。
思ったより、pdfをbase64にかえるのが難しかったのでユーティリティクラスを作りました。
これらを参考にして自身のWebアプリに組み込んでください。