IM-FormaDesigner for Accel Platform / プログラミングガイド 第6版 2015-08-01

8. PDF出力処理

IM-FormaDesigner for Accel Platform では、参照画面をPDFで出力するAPIを提供しています。
PDF出力機能は、Webアプリケーションサーバ内にインストールされた「wkhtmltopdf」を利用します。
そのため、セットアップガイドに記載の通り、「wkhtmltopdf」をインストールしてください。

参照画面をPDF出力する API では、以下のパラメータが必要です。

  • アプリケーションID
  • ユーザデータID

PDF出力するAPIは、以下の箇所で利用できます。

  • 参照画面上に配置した画面アイテム「ボタン(イベント)」
  • 後処理プログラムデータの更新時、データの削除時

コラム

出力されたPDFファイルに埋め込まれるフォントは、「wkhtmltopdf」がインストールされている OS に依存します。
そのため、参照画面をブラウザで閲覧するときとPDFで閲覧する場合に見た目が異なる場合があります。

コラム

PDF出力処理は、API を実行するログインユーザのセッションを利用して行われます。
そのため、参照画面にログインユーザのセッション情報(ユーザ名等)を表示する画面アイテムが配置されている場合、実行したユーザのセッション情報が出力されます。

コラム

API では「wkhtmltopdf」の各種オプションを設定できます。API にオプションを指定しない場合、以下のオプションが付与しています。
  • disable-external-links : リンクを無効にします。
  • print-media-type : 印刷モードで出力します。標準では、forma/css/print.cssが有効になり、ボタンを非表示指定します。
その他利用可能なオプションについては、helpコマンドを参照してください。

helpコマンド
$ wkhtmltopdf -H

コラム

PDF出力が正常に実行できた場合、PDFファイルはWebアーカイブディレクトリの WEB-INF/work/product/forma/tmp/print/ ディレクトリに一時ファイルとして出力されます。
一時ファイルとして出力されたPDFファイルは、使用用途に応じてStorageに永続化したり、クライアントにダウンロードされることを期待しています。
そのため、WEB-INF/work/product/forma/tmp/print/ ディレクトリに出力されたPDFファイルは、API使用後に明示的に削除してください。
※もし削除せず残っていた場合、Webアプリケーションサーバが正常に停止した場合、停止時に上記ファイルは自動的に削除されます。
※Webアプリケーションサーバが異常停止した場合、削除されません。WEB-INF/work/product/forma/tmp/print/ にゴミが残っている場合は、削除してください。

8.1. PDF出力処理の実装

8.1.1. JavaEE開発モデル

JavaEE開発モデルにおいて、PDF出力処理を実装する手順を示します。

8.1.1.1. 実装規約

JavaEE開発モデルにおいて、PDF出力処理を実装する場合、下記の制約に従って実装する必要があります。

  • jp.co.intra_mart.foundation.forma.ApplicationPDFConverter (以下 ApplicationPDFConverter と略す)を利用します。
  • 出力されたPDFファイルはできる限り出力処理後に削除することを推奨します。

8.1.1.2. 実装例1:オプション指定なし

import java.io.File;

import jp.co.intra_mart.foundation.forma.ApplicationPDFConverter;
import jp.co.intra_mart.foundation.forma.exception.FormaSystemException;


    // パラメータ
    final String applicationId = "XX"; // アプリケーションID
    final String insertId      = "XX"; // ユーザデータID

    // PDF出力処理
    final ApplicationPDFConverter pdfConverter = new ApplicationPDFConverter();
    File pdfFile = null;
    try {
        pdfFile = pdfConverter.createPDF(applicationId, insertId);
        
        : (ファイル操作処理)
        
    } catch(final FormaSystemException e) {
        // TODO エラー処理
        e.printStacktrace();
    } finally {
        // 出力されたPDFファイルを削除
        if (pdfFile != null && pdfFile.exists()) {
            pdfFile.delete();
        }
    }

8.1.1.3. 実装例2:オプション指定あり

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import jp.co.intra_mart.foundation.forma.ApplicationPDFConverter;
import jp.co.intra_mart.foundation.forma.exception.FormaSystemException;

    // パラメータ
    final String applicationId = "XX"; // アプリケーションID
    final String insertId      = "XX"; // ユーザデータID
    
    // wkhtmltopdfオプション
    final List<String> options = new ArrayList<String>();
    // リンク無効
    options.add("--disable-external-links");
    // 印刷モード
    options.add("--print-media-type");
    
    // PDF出力処理
    final ApplicationPDFConverter pdfConverter = new ApplicationPDFConverter();
    File pdfFile = null;
    try {
        pdfFile = pdfConverter.createPDF(applicationId, insertId, 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に分けて設定してください。

コラム

ロードバランシング環境にて、改善モジュールを利用している場合は、APIの引数としてオプションを指定する必要があります。
オプションの設定値については、以下を参照ください。

8.1.2. スクリプト開発モデル

スクリプト開発モデルにおいて、PDF出力処理を実装する手順を示します。

  • FRApplicationPDFConverter を利用します。
  • 出力されたPDFファイルはできる限り出力処理後に削除することを推奨します。

8.1.2.1. 実装例:オプション指定なし

    // パラメータ
    var applicationId = "XX"; // アプリケーションID
    var insertId      = "XX"; // ユーザデータID

    // PDF出力処理
    var pdfConverter = new FRApplicationPDFConverter();
    var result = pdfConverter.createPDF(applicationId, insertId);
    if (result.error) {
        // TODO エラー処理
        Debug.console(result);
    } else {
        // PDFファイル
        var pdfFile = result.data;
        
        : (ファイル操作処理)
        
        // 出力されたPDFファイルを削除
        pdfFile.remove();
    }

8.1.2.2. 実装例:オプション指定あり

    // パラメータ
    var applicationId = "XX"; // アプリケーションID
    var insertId      = "XX"; // ユーザデータID
    
    // wkhtmltopdfオプション
    var options = [];
    // リンク無効
    options.push("--disable-external-links");
    // 印刷モード
    options.push("--print-media-type");

    // PDF出力処理
    var pdfConverter = new FRApplicationPDFConverter();
    var result = pdfConverter.createPDF(applicationId, insertId, 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に分けて設定してください。

コラム

ロードバランシング環境にて、改善モジュールを利用している場合は、APIの引数としてオプションを指定する必要があります。
オプションの設定値については、以下を参照ください。