Webサーバやロードバランサーをご利用している環境で、ベースURLを設定している場合は、wkhtmltopdfからリクエスト先を考慮し対応を検討する必要があります。
【更新履歴】
1. 2014/11/20 FAQに公開しました。
2. 2015/06/22 Linux版wkhtmltopdfで本改善モジュールが利用できない問題を修正しました。
3. 2015/07/08 更新履歴の追加と設定ファイルに関する説明の修正を行いました。
【原因】
PDF出力機能では、各APサーバ上にインストールされたwkhtmltopdfツールを利用して、PDF出力を行っています。
wkhtmltopdfツールは、コマンドに指定したURLで応答されるHTMLページをレンダリングしてそのページをPDFファイルとして出力できるツールです。
IM-FormaDesignerでは、ユーザからのPDF出力要求(リクエスト)に対して、APサーバ上で要求されたアプリケーションの参照画面用のURLをwkhtmltopdfコマンドの引数に指定して実行し、出力されたPDFファイルを応答しています。
このようにユーザからのPDF出力要求(リクエスト)と、wkhtmltopdfツールからのPDF出力画面要求(リクエスト)は異なるリクエストです。
APサーバではユーザからのPDF出力要求(リクエスト)と、wkhtmltopdfツールからのPDF出力画面要求(リクエスト)を、同じログインユーザ(HTTPセッション)で処理させる必要がありますが、wkhtmltopdfツールからのPDF出力画面要求(リクエスト)を受け付けたAPサーバには、そのHTTPセッション情報が解決できない場合、PDF出力に失敗します。
【回避方法】
wkhtmltopdfツールからのリクエストが、ユーザからのPDF出力要求(リクエスト)を受け付けたAPサーバへアクセスするようにネットワークの設定を変更します。
【対応方法】
1. ロードバランシング環境のPDF出力改善モジュールを組み込んでください。
・ Accel Platform 2013 Winter(Felicia)
ユーザーモジュール「forma_pdf_load_balancing-8.0.6.imm」を組み込んでください。
・ Accel Platform 2014 Spring(Granada)
ユーザーモジュール「forma_pdf_load_balancing-8.0.7.imm」を組み込んでください。
・ Accel Platform 2014 Summer(Honoka)以降
ユーザーモジュール「forma_pdf_load_balancing-8.0.8.imm」を組み込んでください。
2. PDF出力リクエスト先サーバのベースURLの設定を行います。
[設定ファイル]
conf/forma-pdf-config.xml
※Jugglingで編集可能なファイル
[設定項目(任意)]
forma-pdf-config/base-url
[設定値]
各APサーバ上のwkhtmltopdfツールからアクセス可能なhttp、またはhttpsプロトコルのコンテキストパスまでのベースURLを設定してください。
例:http://127.0.0.1:8080/imart
※APサーバにResinを利用している場合は、ResinのHTTPサーバにアクセス可能なベースURLを指定します。
ロードバランサにて負荷分散している環境や統合Windows認証を利用している環境においては、forma-pdf-config.xmlのbase-urlのホストには、ローカルホストを指定してください。
3. wkhtmltopdfツールのコマンドオプションの設定を行います。
[設定ファイル]
conf/forma-pdf-config.xml
※Jugglingで編集可能なファイル
[設定項目]
forma-pdf-config/options/option
[設定値]
オプション(key)
cookie
オプション(value-string)
imfr_pdf_request
オプション設定値(value-string)
true
4. 画面操作ではなく、PDF出力処理APIを利用してPDF出力される場合は、3のオプションをPDF出力処理APIの引数にて指定してください。
[サンプルコード]
// wkhtmltopdfオプション
var options = [];
options.push("--cookie");
options.push("imfr_pdf_request");
options.push("true");
// PDF出力処理
var pdfConverter = new FRApplicationPDFConverter();
var result = pdfConverter.createPDF(applicationId, insertId, options);
【注意事項】
本改善モジュールは、wkhtmltopdf 0.12.1/0.12.2でのみ検証を実施しております。
-- 対象 ------------------------------------------------------------------------
iAP/Accel Extensions/IM-FormaDesigner for Accel Platform/全バージョン
--------------------------------------------------------------------------------
FAQID:491
PDF出力に失敗した場合の対応について
