8. PDF出力処理¶
IM-FormaDesigner for Accel Platform では、参照画面をPDFで出力するAPIを提供しています。PDF出力機能は、Webアプリケーションサーバ内にインストールされた「wkhtmltopdf」を利用します。そのため、セットアップガイドに記載の通り、「wkhtmltopdf」をインストールしてください。参照画面をPDF出力する API では、以下のパラメータが必要です。
- アプリケーションID
- ユーザデータID
PDF出力するAPIは、以下の箇所で利用できます。
- 参照画面上に配置した画面アイテム「ボタン(イベント)」
- 後処理プログラムデータの更新時、データの削除時
コラム
出力されたPDFファイルに埋め込まれるフォントは、「wkhtmltopdf」がインストールされている OS に依存します。
そのため、参照画面をブラウザで閲覧するときとPDFで閲覧する場合に見た目が異なる場合があります。
コラム
PDF出力処理は、API を実行するログインユーザのセッションを利用して行われます。
そのため、参照画面にログインユーザのセッション情報(ユーザ名等)を表示する画面アイテムが配置されている場合、実行したユーザのセッション情報が出力されます。
コラム
API では「wkhtmltopdf」の各種オプションを設定できます。API にオプションを指定しない場合、以下のオプションが付与しています。
- disable-external-links : リンクを無効にします。
- print-media-type : 印刷モードで出力します。標準では、forma/css/print.cssが有効になり、ボタンを非表示指定します。
その他利用可能なオプションについては、helpコマンドを参照してください。helpコマンド$ wkhtmltopdf -H
コラム
PDF出力が正常に実行できた場合、PDFファイルはWebアーカイブディレクトリの WEB-INF/work/product/forma/tmp/print/ ディレクトリに一時ファイルとして出力されます。
一時ファイルとして出力されたPDFファイルは、使用用途に応じてStorageに永続化したり、クライアントにダウンロードされることを期待しています。
そのため、WEB-INF/work/product/forma/tmp/print/ ディレクトリに出力されたPDFファイルは、API使用後に明示的に削除してください。
※もし削除せず残っていた場合、Webアプリケーションサーバが正常に停止した場合、停止時に上記ファイルは自動的に削除されます。
※Webアプリケーションサーバが異常停止した場合、削除されません。WEB-INF/work/product/forma/tmp/print/ にゴミが残っている場合は、削除してください。
8.1. PDF出力処理の実装¶
8.1.1. JavaEE開発モデル¶
JavaEE開発モデルにおいて、PDF出力処理を実装する手順を示します。
8.1.1.1. 実装規約¶
JavaEE開発モデルにおいて、PDF出力処理を実装する場合、下記の制約に従って実装する必要があります。
- jp.co.intra_mart.foundation.forma.ApplicationPDFConverter (以下 ApplicationPDFConverter と略す)を利用します。
- 出力されたPDFファイルはできる限り出力処理後に削除することを推奨します。
8.1.1.2. 実装例1:オプション指定なし¶
import java.io.File; import jp.co.intra_mart.foundation.forma.ApplicationPDFConverter; import jp.co.intra_mart.foundation.forma.exception.FormaSystemException; // パラメータ final String applicationId = "XX"; // アプリケーションID final String insertId = "XX"; // ユーザデータID // PDF出力処理 final ApplicationPDFConverter pdfConverter = new ApplicationPDFConverter(); File pdfFile = null; try { pdfFile = pdfConverter.createPDF(applicationId, insertId); : (ファイル操作処理) } catch(final FormaSystemException e) { // TODO エラー処理 e.printStacktrace(); } finally { // 出力されたPDFファイルを削除 if (pdfFile != null && pdfFile.exists()) { pdfFile.delete(); } }
8.1.1.3. 実装例2:オプション指定あり¶
import java.io.File; import java.util.ArrayList; import java.util.List; import jp.co.intra_mart.foundation.forma.ApplicationPDFConverter; import jp.co.intra_mart.foundation.forma.exception.FormaSystemException; // パラメータ final String applicationId = "XX"; // アプリケーションID final String insertId = "XX"; // ユーザデータID // wkhtmltopdfオプション final List<String> options = new ArrayList<String>(); // リンク無効 options.add("--disable-external-links"); // 印刷モード options.add("--print-media-type"); // PDF出力処理 final ApplicationPDFConverter pdfConverter = new ApplicationPDFConverter(); File pdfFile = null; try { pdfFile = pdfConverter.createPDF(applicationId, insertId, options); : (ファイル操作処理) } catch(final FormaSystemException e) { // TODO エラー処理 e.printStacktrace(); } finally { // 出力されたPDFファイルを削除 if (pdfFile != null && pdfFile.exists()) { pdfFile.delete(); } }
PDFファイルの出力方向を標準の縦方向から横方向に変更する場合、オプション指定で以下の内容を記述してください。
options.add("--orientation"); options.add("Landscape");
コラム
オプションに設定値がある場合は、上記のように分けてoptionsに分けて設定してください。
8.1.2. スクリプト開発モデル¶
スクリプト開発モデルにおいて、PDF出力処理を実装する手順を示します。
- FRApplicationPDFConverter を利用します。
- 出力されたPDFファイルはできる限り出力処理後に削除することを推奨します。
8.1.2.1. 実装例:オプション指定なし¶
// パラメータ var applicationId = "XX"; // アプリケーションID var insertId = "XX"; // ユーザデータID // PDF出力処理 var pdfConverter = new FRApplicationPDFConverter(); var result = pdfConverter.createPDF(applicationId, insertId); if (result.error) { // TODO エラー処理 Debug.console(result); } else { // PDFファイル var pdfFile = result.data; : (ファイル操作処理) // 出力されたPDFファイルを削除 pdfFile.remove(); }
8.1.2.2. 実装例:オプション指定あり¶
// パラメータ var applicationId = "XX"; // アプリケーションID var insertId = "XX"; // ユーザデータID // wkhtmltopdfオプション var options = []; // リンク無効 options.push("--disable-external-links"); // 印刷モード options.push("--print-media-type"); // PDF出力処理 var pdfConverter = new FRApplicationPDFConverter(); var result = pdfConverter.createPDF(applicationId, insertId, options); if (result.error) { // TODO エラー処理 Debug.console(result); } else { // PDFファイル var pdfFile = result.data; : (ファイル操作処理) // 出力されたPDFファイルを削除 pdfFile.remove(); }
PDFファイルの出力方向を標準の縦方向から横方向に変更する場合、オプション指定で以下の内容を記述してください。
options.push("--orientation"); options.push("Landscape");
コラム
オプションに設定値がある場合は、上記のように分けてoptionsに分けて設定してください。