IM-BIS for Accel Platform セットアップガイド 第13版 2015-09-30

8.1. PDF出力機能

ここでは、IM-FormaDesignerのフォームをPDFファイルとして出力する方法について説明します。

8.1.1. PDF出力機能とは

IM-FormaDesignerのアプリケーションからPDFファイルにダウンロードできます。
PDFの出力は、アプリケーションの一覧表示画面、参照画面上に配置した画面アイテム「ボタン(イベント)」で実行できます。
  • ファイルの生成時に利用している描画エンジンはChromeやSafariで使用しているWebkitエンジンを利用しています。 そのため、PDF出力時のイメージはChromeやSafariを利用したイメージに近くなります。
  • レイアウトを独自に設計された帳票イメージでPDF出力を行いたい場合は、別製品であるIM-PDFDesigner for Accel Platformをご利用ください。
以下は、PDF出力機能の処理イメージとなります。
../../../_images/output_pdf_1.png
① クライアントから IM-FormaDesignerアプリケーションのPDFファイルダウンロードを実行します。
② アプリケーションは、コマンドベースでwkhtmltopdfにPDF作成を指示します。
③ wkhtmltopdfは、HTTPリクエストでPDF出力用HTMLを取得します。
取得したHTML内の静的ファイル・Ajax通信のリクエスト先は、APサーバにてベースURL設定に置き換えられます。
④ Webkitエンジンは、PDF出力用HTMLを読み取り、静的ファイルの取得やAjax通信を実施します。
リクエスト先はAPサーバにて置き換えられたベースURLになります。
レンダリングとクライアントサイドJavaScriptを実行をして、対象Forma画面のイメージを作成します。
⑤ QTは、画面イメージからPDFを作成します。
⑥ wkhtmltopdfは、作成したPDFを返却します。
⑦ アプリケーションは、作成したPDFを返却します。

8.1.2. wkhtmltopdf

8.1.2.1. wkhtmltopdfのインストール

インストールについては、「 IM-FormaDesigner セットアップガイド 」の「 wkhtmltopdfのインストール 」を参照してください。

注意

選択モジュールにSAStrutsを含んでいる場合は、war作成時の実行環境を「結合テスト環境」にすると
PDF出力機能を利用することができません。
PDF出力機能を利用する場合は、「結合テスト環境」以外を選択してください。

8.1.2.2. wkhtmltopdfのコマンドオプション

IM-FormaDesigner の詳細設定ファイル(forma-pdf-config.xml)を変更することで、wkhtmltopdfのオプションを設定することができます。
オプション設定は IM-FormaDesigner 2013 Winter(8.0.5)より利用可能です。
コマンドオプションの詳細については、「 wkhtmltopdf Documentation 」を参照してください。
使用可能なオプションは、wkhtmltopdfのバージョンにより異なります。
以下は、PDF出力時のパラメータ設定の記述例と良く利用する設定項目です。
<?xml version="1.0" encoding="UTF-8"?>
<forma-pdf-config xmlns="http://www.intra-mart.jp/forma-pdf-config"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.intra-mart.jp/forma/forma-config ../../schema/forma-pdf-config.xsd">
    <base-url>http://127.0.0.1:8080/imart</base-url>
     <options>
         <option>
             <key>zoom</key>
             <value-string>1</value-string>
         </option>
         <option>
             <key>image-dpi</key>
             <value-int>600</value-int>
         </option>
         <option>
             <key>page-size</key>
             <value-string>A4</value-string>
         </option>
         <option>
             <key>orientation</key>
             <value-string>Portrait</value-string>
         </option>
         <option>
             <key>footer-center</key>
             <value-string>"[page]/[toPage]"</value-string>
         </option>
         <option>
             <key>javascript-delay</key>
             <value-int>200</value-int>
         </option>
     </options>
</forma-pdf-config>
オプション 説明
zoom
拡大縮小設定: 2, 1, 0.9
(省略時 1)
image-dpi
解像度を設定 dpi
(省略時 600)
page-size
ページサイズを設定: A4, Letter, etc
(省略時 A4)
orientation
ページの向きを設定: Landscape, Portrait
(省略時 Portrait)
footer-center
フッターとしてセンター位置に任意の情報を設定
設定例 “[page]/[toPage]” 現在ページと最終ページを表示
javascript-delay
javascriptのウエイトタイム設定 msec
(省略時 200)

コラム

その他利用可能なオプションについては、helpコマンドを参照してください。

helpコマンド
$ wkhtmltopdf -H

8.1.3. ロードバランサーを利用する場合

ロードバランサーをご利用している環境では、wkhtmltopdfからリクエスト先を考慮し対応を検討する必要があります。
wkhtmltopdfが、PDF出力用HTMLを読み取り、静的ファイルの取得やAjax通信を行うため以下の点が懸念されます。
../../../_images/output_pdf_2.png
① wkhtmltopdfからのリクエストが、ロードバランサーを経由してAPサーバへアクセスできない。
② wkhtmltopdfからのリクエストが、ロードバランサーを経由すると別APサーバへアクセスされる。
その場合は、セッションが存在しないため、エラーとなります。

コラム

APサーバからWebサーバへアクセスできない環境の場合も、改善モジュールによる対応で解決することが可能です。
  • 改善モジュールによる対応

    下記FAQで公開している改善モジュールを適用していただくと、リクエストごとにベースURLを変更することができます。
    wkhtmltopdfからのリクエストのみ、APサーバのローカルホストをベースURLに設定します。

    コラム

    改善モジュールによる対応は IM-FormaDesigner 2013 Winter(8.0.6)以降のバージョンで利用可能です。

    コラム

    一覧表示画面からPDFファイルを出力する場合は、設定ファイルにオプションを設定します。
    PDF出力するAPIを利用する場合は、設定ファイルではなく、APIの引数としてオプションを指定する必要があります。
    オプションの設定値については、上記のFAQ詳細ページを参照してください。

8.1.4. Windows統合認証を利用する場合

Windows統合認証環境をご利用の場合は、PDF出力時の「wkhtmltopdf」オプションに認証用ユーザ情報を設定してください。

<options>
   ・・・・・・・・・・・略・・・・・・・・・・・・
   <option>
      <key>username</key>
      <value-string>%認証ユーザID%</value-string>
    </option>
    <option>
      <key>password</key>
      <value-string>%パスワード%</value-string>
    </option>
</options>

8.1.5. リクエスト情報を利用したテナント自動解決機能を利用する場合

リクエスト情報を利用したテナント自動解決機能を有効とした場合、PDF出力機能を使うためには、以下の設定をする必要があります。
  1. im-Juggling で、設定対象のプロジェクト直下に「plugin」フォルダを新規作成します。

  2. 「plugin」フォルダに、下記のフォルダを作成します。
    jp.co.intra_mart.foundation.admin.tenant.context.tenant.resolver.forma_pdf_8.0.9
    
    ../../../_images/output_pdf_3.png
  3. 上記のフォルダに、以下のファイルを解凍して配置します。
  4. im-Juggling からWARファイルの出力を行い、WARファイルをデプロイすると、設定内容が反映されます。

コラム

本対応は IM-FormaDesigner 2015 Spring(8.0.9)以降のバージョンで利用可能です。

コラム

テナント自動解決機能の詳細は、「 intra-mart Accel Platform セットアップガイド 」-「 テナント解決機能 」を参照してください。

8.1.6. IM-SecureSignOn for Accel Platform を利用する場合

IM-SecureSignOn for Accel Platform を利用する場合、リクエスト情報を利用したテナント自動解決機能が有効となります。
PDF出力機能を使うためには、「 リクエスト情報を利用したテナント自動解決機能を利用する場合 」に記載の設定を行ってください。

8.1.7. JavaScript遅延タイムアウト

PDF出力対象の画面にてAjax通信を行っている場合、JavaScriptスクリプトがタイムアウトする場合があります。
JavaScriptスクリプトのウエイトタイムは、wkhtmltopdfのオプションで変更できます。
設定方法は、「wkhtmltopdfのコマンドオプション 」を参照してください。
コマンドオプションの詳細については、「 wkhtmltopdf Documentation 」を参照してください。
使用可能なオプションは、wkhtmltopdfのバージョンにより異なります。

8.1.8. 出力ファイルのレイアウト変更

出力するPDFファイルのレイアウトは、wkhtmltopdfのオプションで変更できます。
設定方法は、「wkhtmltopdfのコマンドオプション 」を参照してください。
コマンドオプションの詳細については、「 wkhtmltopdf Documentation 」を参照してください。
使用可能なオプションは、wkhtmltopdfのバージョンにより異なります。

8.1.9. 印刷対象の画面の描画が完了した状態でPDFに出力する方法

PDF出力対象の画面にてAjax通信を行っている場合、JavaScriptスクリプトがタイムアウトする場合があります。
JavaScriptスクリプトのウエイトタイムは、wkhtmltopdfのオプションで変更できますが、タイムアウトが確実に回避できるわけではありません。
設定を行うことで、印刷対象の画面の描画が完了した状態を待ってPDF出力することが可能です。
実現するために、下記の手順を実施する必要があります。
  1. wkhtmltopdfコマンド実行時のオプションでwindow-statusを指定します。
    オプションの指定方法としては、システム単位の設定ファイルに記述する方法とPDF出力APIにて個別に指定する方法の2つがあります。
    --window-status    <windowStatus>    Wait until window.status is equal to this string before rendering page
    
  2. 画面描画完了したタイミングで、下記のスクリプトがクライアントサイドで実行されるように設定します。
    アクション設定機能の初期表示イベントの最後のアクションとしてスクリプトを設定しておくことで、
    画面描画が完了したタイミングにて実行可能です。
    window.status = 'complete';
    

注意

window.statusにcompleteをセットする処理が実行されないとPDF出力処理が完了せず、応答がない状態となってしまいます。
この状態になってしまった場合は、wkhtmltopdfの外部プロセスが永久に実行されたままの状態となります。