PDF出力に失敗した場合の対応について

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
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
Powered by Zendesk