8.2. ジョブスケジューラ・非同期処理機能での実装手順¶
コラム
当ページでは「wkhtmltopdf を利用したPDF出力機能」について説明します。注意
wkhtmltopdf は2023年1月にアーカイブされました。そのため、wkhtmltopdf のセットアップと運用は非推奨となりました。wkhtmltopdf のインストーラが提供されている環境では、現行どおり wkhtmltopdf を利用する事は可能です。弊社テクニカルサポートセンターでの問合せ対応も引き続き可能です。クライアントサイドのPDF出力は、2023 Autumn(Hollyhock) からはブラウザ印刷を利用した機能を提供します。wkhtmltopdf のPDF出力に代わり利用を検討ください。次の手段でサーバサイドでPDFを出力している、または出力しようとしている場合は IM-PDFDesigner for Accel Platform の利用を検討ください。
- JavaEE開発モデル PDF出力API
- スクリプト開発モデル PDF出力API
- Office 365 for IM-BIS ファイルアップロードジョブ
ジョブスケジューラ・非同期処理機能にて、参照画面をPDF出力する API では、以下のパラメータが必要です。
- アプリケーションID
- ユーザデータID
- 対象の参照画面を表示可能なユーザのユーザコード
PDF出力するAPIは、以下の機能で利用できます。ジョブスケジューラ・非同期処理機能の実装方法については、それぞれのドキュメントを参照してください。
- ジョブネット ( ジョブスケジューラ仕様書 )
- 非同期処理 ( 非同期仕様書 )
コラム
参照画面をPDF出力する API では、処理内部でショートカットURLを作成します。
そのため、対象の参照画面を表示可能なユーザのユーザコードを指定する必要があります。
コラム
ワークフローの詳細画面をPDF出力する場合は、対象の案件が完了している必要があります。
そのため、IM-Workflow の到達処理や案件終了処理では、直接利用することはできません。
案件終了処理から非同期処理としてや、ジョブスケジューラにて利用してください。
ワークフローの案件の状態は、「 UserMatterStatusオブジェクト 」で確認することできます。
コラム
複数フォーム画面をPDF出力する場合、「wkhtmltopdf」のバージョンによっては、各画面毎に横幅を基準に出力サイズを自動調整します。
そのため、各画面毎に毎に異なった拡大率で出力される場合があります。
変更する場合は、「wkhtmltopdf」のオプションを指定してください。
注意
Office 365 連携 でPDFを出力する場合、javascript-delayオプションが必要となるため、wkhtmltopdf の0.10.0以降をご利用ください。
8.2.1. JavaEE開発モデル¶
JavaEE開発モデルにおいて、PDF出力処理を実装する手順を示します。
8.2.1.1. 実装規約¶
JavaEE開発モデルにおいて、PDF出力処理を実装する場合、下記の制約に従って実装する必要があります。
- jp.co.intra_mart.foundation.forma.pdf.ApplicationPDFConverterAsync (以下 ApplicationPDFConverterAsync と略す)を利用します。
- 出力されたPDFファイルはできる限り出力処理後に削除することを推奨します。
8.2.1.2. 実装例1:オプション指定なし¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import java.io.File; import jp.co.intra_mart.foundation.forma.ApplicationPDFConverterAsync; import jp.co.intra_mart.foundation.forma.exception.FormaSystemException; // パラメータ final String applicationId = "XX"; // アプリケーションID final String userDataId = "XX"; // ユーザデータID final String userCd = "XX"; // ユーザコード // PDF出力処理 final ApplicationPDFConverterAsync pdfConverter = new ApplicationPDFConverterAsync(); File pdfFile = null; try { pdfFile = pdfConverter.createPDFapplicationId, userDataId, userCd); : (ファイル操作処理) } catch(final FormaSystemException e) { // TODO エラー処理 e.printStacktrace(); } finally { // 出力されたPDFファイルを削除 if (pdfFile != null && pdfFile.exists()) { pdfFile.delete(); } }
8.2.1.3. 実装例2:オプション指定あり¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import java.io.File; import java.util.ArrayList; import java.util.List; import jp.co.intra_mart.foundation.forma.ApplicationPDFConverterAsync; import jp.co.intra_mart.foundation.forma.exception.FormaSystemException; // パラメータ final String applicationId = "XX"; // アプリケーションID final String insertId = "XX"; // ユーザデータID final String userCd = "XX"; // ユーザコード // wkhtmltopdfオプション // forma-pdf-config.xmlの設定内容を取得 final List<String> options = PDFConfigOption.getList(); // リンク無効を追加 options.add("--disable-external-links"); // 印刷モードを追加 options.add("--print-media-type"); // PDF出力処理 final ApplicationPDFConverterAsync pdfConverter = new ApplicationPDFConverterAsync(); File pdfFile = null; try { pdfFile = pdfConverter.createPDF(applicationId, insertId, userCd, 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.2.1.4. 実装例3:オプション指定あり、任意のリクエストパラメータ指定あり¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 import java.io.File; import java.util.ArrayList; import java.util.List; import jp.co.intra_mart.foundation.forma.ApplicationPDFConverterAsync; import jp.co.intra_mart.foundation.forma.exception.FormaSystemException; // パラメータ final String applicationId = "XX"; // アプリケーションID final String insertId = "XX"; // ユーザデータID final String userCd = "XX"; // ユーザコード // wkhtmltopdfオプション final List<String> options = new ArrayList<String>(); // リンク無効 options.add("--disable-external-links"); // 印刷モード options.add("--print-media-type"); // 任意のリクエストパラメータ final Map<String, Object> optionalParams = new HashMap<String, Object>(); map.put("任意KEY1", "任意パラメータ1"); map.put("任意KEY2", "任意パラメータ2"); // PDF出力処理 final ApplicationPDFConverterAsync pdfConverter = new ApplicationPDFConverterAsync(); File pdfFile = null; try { pdfFile = pdfConverter.createPDF(applicationId, insertId, userCd, options, optionalParams); : (ファイル操作処理) } catch(final FormaSystemException e) { // TODO エラー処理 e.printStacktrace(); } finally { // 出力されたPDFファイルを削除 if (pdfFile != null && pdfFile.exists()) { pdfFile.delete(); } }
コラム
PDF出力対象画面に対し、任意のリクエストパラメータを設定することができます。
前処理に任意のパラメータを受け渡す場合は、「前処理 」を参照してください。
8.2.2. スクリプト開発モデル¶
スクリプト開発モデルにおいて、PDF出力処理を実装する手順を示します。
- ApplicationPDFConverterAsync を利用します。
- 出力されたPDFファイルはできる限り出力処理後に削除することを推奨します。
8.2.2.1. 実装例1:オプション指定なし¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // パラメータ var applicationId = "XX"; // アプリケーションID var insertId = "XX"; // ユーザデータID var userCd = "XX"; // ユーザコード // PDF出力処理 var pdfConverter = new FRApplicationPDFConverterAsync(); var result = pdfConverter.createPDF(applicationId, insertId, userCd); if (result.error) { // TODO エラー処理 Debug.console(result); } else { // PDFファイル var pdfFile = result.data; : (ファイル操作処理) // 出力されたPDFファイルを削除 pdfFile.remove(); }
8.2.2.2. 実装例2:オプション指定あり¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 // パラメータ var applicationId = "XX"; // アプリケーションID var insertId = "XX"; // ユーザデータID var userCd = "XX"; // ユーザコード // wkhtmltopdfオプション var options = []; // forma-pdf-config.xmlの設定内容を取得 options = FRApplicationPDFConverterAsync.getOptions() // リンク無効を追加 options.push("--disable-external-links"); // 印刷モードを追加 options.push("--print-media-type"); // PDF出力処理 var pdfConverter = new FRApplicationPDFConverterAsync(); var result = pdfConverter.createPDF(applicationId, insertId, userCd, 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に分けて設定してください。
8.2.2.3. 実装例3:オプション指定あり、任意のリクエストパラメータ指定あり¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 // パラメータ var applicationId = "XX"; // アプリケーションID var insertId = "XX"; // ユーザデータID var userCd = "XX"; // ユーザコード // wkhtmltopdfオプション var options = []; // リンク無効 options.push("--disable-external-links"); // 印刷モード options.push("--print-media-type"); // 任意のリクエストパラメータ var optionalParams = {}; optionalParams.sampleKEY1 = "任意パラメータ1"; optionalParams.sampleKEY2 = "任意パラメータ2"; // PDF出力処理 var pdfConverter = new FRApplicationPDFConverterAsync(); var result = pdfConverter.createPDF(applicationId, insertId, userCd, options, optionalParams); if (result.error) { // TODO エラー処理 Debug.console(result); } else { // PDFファイル var pdfFile = result.data; : (ファイル操作処理) // 出力されたPDFファイルを削除 pdfFile.remove(); }
コラム
PDF出力対象画面に対し、任意のリクエストパラメータを設定することができます。
前処理に任意のパラメータを受け渡す場合は、「 前処理 」を参照してください。