まず、技術的な注意: Web プロジェクトで wkhtmltopdf を使用したいので、ssh 経由で (つまり、ネットワーク経由で) アクセスする Linux サーバー マシンにデプロイする場合は、パッチを適用した Qt バージョンを使用する必要があります。または、ダミーの X サーバー xvfb などの X サーバーを実行します。(Linux 以外のオペレーティング システムを実行しているサーバーに展開するとどうなるかはわかりません。)
第 2 に、Web プロジェクトで任意の言語から wkhtmltopdf を使用するのは非常に簡単です。
現在のページのサーバー生成バージョンを保存したいだけの場合、つまり、ユーザーがフォームに入力したり、Javascript が新しい DOM 要素を追加したりするなどの変更を加えずに保存したい場合は、 ?generate=pdf
onのような追加のオプションの引数が必要です。これにより、そのページが PDF として生成され、PDF ボタンがその URL にリンクされます。単純な JSP などを使用しているだけの場合、これを各ページに手動で追加するのは大変な作業になる可能性がありますが、使用している Web フレームワークによっては、Web フレームワークがすべてのページに同じアクションを実装するのに役立つ場合があります。それを実装する必要があります。
このアプローチを実装するには、おそらく、応答オブジェクトをラップし、そのメソッドgetWriter()
とgetOutputStream()
メソッドをオーバーライドして、応答を取得する必要があります。
もう 1 つの方法は、次のページを PDF として生成する「PDF を送信して生成する」ボタンを用意することです。ユーザーが入力する必要があるフォームがある場合、これはより理にかなっています-わかりません。それは本当に設計上の決定です。
3 番目の方法は、Javascript を使用してページの現在の状態をサーバーにアップロードし、wkhtmltopdf を使用してそれを処理することです。これはどのページでも機能します。(これをブックマークレットにすれば、あなたのサイトだけでなく、どのサイトでも使用できます。ただのアイデアです。これは良いアイデアではないかもしれません。)
4 番目の方法は、wkhtmltopdf が URL をフェッチできるため、ページのコンテンツではなくページの URL を渡すことです (これは、リクエストが HTTP GET であった場合、または同じ URL での HTTP GET と同等である場合にのみ機能します)。 )。これには、独自の応答出力をキャプチャするための少量のオーバーヘッドがありますが、おそらく無視できます。おそらくユーザーがログインしているか、暗黙的なセッションを持っている可能性があるため、このアプローチではCookieをCookie jarにコピーする必要がある可能性が非常に高くなります。
ご覧のとおり、非常に多くの選択肢があります。
ここで、問題が残ります。サーバーに必要な HTML がある場合、上記のアプローチのいずれかから、それを wkhtmltopdf にフィードする方法は? これはとても簡単です。Runtime.getRuntime().exec()
または、呼び出された新しい APIを使用して、外部プロセスを生成する必要がありProcessBuilder
ます。比較用のhtml 。あなたがそれについて賢いなら、一時ファイルを作成する必要なくこれを行うことができるはずです.
wkhtmltopdf Web サイトの 1 つが現在ダウンしていますが、メインの README はこちらから入手でき、コマンド ライン引数について説明しています。
これは、いくつかの指針を与える概略的な回答にすぎません。詳細が必要な場合は、具体的に何を知る必要があるかをお知らせください。