IM-BIS for Accel Platform セットアップガイド 第26版 2019-12-01

8.1. PDF出力機能

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

8.1.1. PDF出力機能とは

PDF出力機能については、「 IM-FormaDesigner 作成者操作ガイド 」の「 PDF出力機能とは 」を参照してください。

8.1.2. PDF出力機能の処理イメージ

以下は、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.3. wkhtmltopdf

8.1.3.1. wkhtmltopdfのインストール

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

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

IM-FormaDesigner の詳細設定ファイル(forma-pdf-config.xml)を変更することで、wkhtmltopdfのオプションを設定することができます。
オプション設定は IM-FormaDesigner 2013 Winter(8.0.5)より利用可能です。
コマンドオプションの詳細については、「 wkhtmltopdf Documentation 」を参照してください。
使用可能なオプションは、wkhtmltopdfのバージョンにより異なります。
以下は、PDF出力時のパラメータ設定の記述例と良く利用する設定項目です。
 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
 <?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.4. ベースURLを設定している場合

Webサーバやロードバランサーをご利用している環境で、ベースURLを設定している場合は、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.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つがあります。
    以下は、システム単位の設定ファイルに記述する例です。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    <?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>window-status</key>
                <value-string>complete</value-string>
            </option>
            ・
            ・
            ・
        </options>
    </forma-pdf-config>
    
    オプション 説明
    window-status
    window.statusを設定: complete
    クライアントサイドで設定するwindow.statusを設定
  2. 画面描画が完了したタイミングで、下記のスクリプトがクライアントサイドで実行されるように設定します。
    アクション設定機能の初期表示イベントの最後のアクションとしてスクリプトを設定しておくことで、
    画面描画が完了したタイミングにて実行可能です。
window.status = 'complete';

注意

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

8.1.10. wkhtmltopdfプロセスのタイムアウト時間の変更

IM-FormaDesigner の詳細設定ファイル(forma-pdf-config.xml)を変更することで、wkhtmltopdfプロセスのタイムアウト時間を設定することができます。
タイムアウト時間の設定は IM-FormaDesigner 2016 Spring(8.0.12)より利用可能です。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 <?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>
             ・
             ・
             ・
      </options>
             ・
             ・
             ・
      <process-timeout-time>300000</process-timeout-time>
 </forma-pdf-config>
オプション 説明
process-timeout-time
wkhtmltopdfプロセスのタイムアウト時間 msec
(省略時、または0設定時 300000)