NEWS
IBM i 技術解説 IBM i 技術解説
2026.03.10
SHARE
  • twitter
  • facebook
  • hatena
  • linkedin

IBM i Apache-FOPによるPDF作成|第3回|サンプル・プログラムの概要と配置および実行方法

IBM i Apache-FOPによるPDF作成|第3回|サンプル・プログラムの概要と配置および実行方法

→第一回「概要」(最終的にどのようなPDFが作成できるのか?)はこちら
→第二回「PASE環境へのApache-FOPインストールと実行するための設定」はこちら

1. サンプル・プログラムの概要

※ ①~⑤の処理のそれぞれの詳細については、このあと順番に説明いたします。

サンプル・プログラムで、PASE環境へのApache-FOP導入は「/opt/fop」に行います。弊社で開発した環境は以下のとおりです。
※この資料ではPythonがインストールされている前提です。

No. 項目 内容 備考
1 5250エミュレータ IBM i Client Access Solutions 1.1.9.6 エミュレータのコードページ 930 (※CCSID=5026)
2 OS IBMi V7.5 TR 3 CCSID 5026 : 日本語カタカナ
3 Java JDK 8以上 Apache-FOP2.10のREADMEに記載されています。
4 Apache-FOP 2.10 Apacheのホームページからダウンロードする

① 選択処理

画面から見積りデータを入力、照会します。画面はヘッダー部入力(SAMPLE02)と明細部入力(SAMPLE03)に分かれています。
ヘッダー部入力で作成したいPDFを選択(オプション=P)し、実行キーを押すことでPDFを作成します。
(オプション=Pで明細画面を表示後、F1でCLP(SAMPLE03PC)を実行します。)
今回は、確認しやすいようにPCにPDFファイルをダウンロードした後、拡張子PDFに紐付けされたプログラムでPDFファイルを表示します。

② XMLデータ出力(SAMPLE03PCのCLPで実行)

CSVTXT3をQTEMPに生成し、生成されたQTEMP/CSVTXT3にXMLデータを作成します。漢字文字コードはシフトJISです。

XMLデータ作成時、パラメータとして渡されたフォント名をXMLデータに出力しています。フォント名はXSLTで使用します。

③ FTPデータ転送

QTEMP/CSVTXT3をFTPでIFS上に転送します。漢字コード変換(IBM漢字→シフトJIS)はFTPが行ってくれます。
UNICODEで転送する方法は複数あります。QTEMP/CSVTXT3をバイナリーモードで転送後、iconvでコード変換する、FTPでUTF-8変換させる、あるいはcsvtxt3のCCSIDを1399にする、等が考えられますが、ここでは説明対象外とさせて頂きます。

④ PASE環境のシェル・スクリプト実行

シェル・スクリプト実行前に、現行ジョブのCCSIDを1399に変更してからqp2shellにて実行します。
シェル・スクリプトには、5つのパラメータを渡します。

  • 1つ目:ユーザーID
  • 2つ目:XMLファイル名
  • 3つ目:XSLTファイル名(※Apache-FOPで使用)
  • 4つ目:PDFファイル名
  • 5つ目:STSファイル名

run_fop2.sh から run_fop.shを実行。デバッグしやすいように、シェル・スクリプトには下記のオプションを指定して行います。

  • -v シェル入力行を、読み込まれたとおりに印刷します。
  • -x 実行されたコマンドおよびその引数を印刷します。

また、.STSファイルに実行結果と生成されたPDFファイル名を出力します。

⑤ Apache-FOPによるPDF作成

シェル・スクリプトからApache-FOPを実行します。今回は単純に、シンプルなPDFを作成するコマンドを実行します。
Apache-FOP 2.10からはオプションが追加されています。(下記は代表的なもの)

No. オプション 説明
1 -u password PDFを開くときにパスワード入力が必要になります。(※ユーザー・パスワード)
2 -o password PDFの印刷や編集を制限できます。制限を解除するにはパスワードが必要になります。(※オーナー・パスワード)
オーナー・パスワードのみ指定されたPDFファイルはパスワードなしで開く事ができます。
3 -noprint PDFの印刷不可
4 -nocopy PDFのコピー禁止(Ctrl-c)
5 -noedit PDFの編集禁止
6 -noannotations PDFの注釈禁止

⑥ PDFの表示

パラメータ・ファイルID(PC_CONFIG)の第一パラメータが*YESの時、PCに生成したPDFファイルをダウンロードし表示します。
現状、PDF変換すると約10秒かかります。即時性が必要な場合はサーブレット化する事をお勧めします。
※予めサンプルとして提供しているFOPPDF.BATファイルをC:\TESTフォルダーにコピーする必要があります。

2. サンプルプログラムの詳細

2.1 選択処理(① の内容になります)

2.1.1 ヘッダー画面

2.1.2 ヘッダー画面(PDF作成)

2.1.3 明細画面

■ 明細追加

■ 明細変更

オプションに2と入力し実行キーを押すと、該当明細の情報が画面下部に表示され、情報を変更する事ができます。

■ 明細削除

オプションに3と入力し、実行キーを押すと該当明細の情報が画面下部に表示され、OK(Y)にYを入力して実行キーを押す事で明細行を削除する事ができます。

2.2 XMLデータ作成、FTPデータ転送、QP2SHELLの起動(②~④の内容になります)

SAMPLE03PC (CLP)の処理になります。このCLPは画面入出力がありません。
このCLPでは5026<->1399のデータ変換トラブル回避の為、パラメータ・ファイルから必要な情報を取得します。
パラメータ・ファイルは#UTLPRMP1プログラムで情報の保守ができます。

CL 変数の定義1

CL 変数の定義2

CL 変数の定義3

(システム日付および時刻の取得)

2.2.1 XMLデータ作成(②の処理)

2.2.2 FTPデータ転送(③の処理)

2.2.3 PASE環境シェル・スクリプト実行(④の処理)

2.2.4 Apache-FOPの実行(⑤の処理)

最初に実行するシェル・スクリプト(run_fop2.sh)※このシェル・スクリプトからrun_fop.shをデバック・オプション付きで実行します。

run_fop.sh (Apache-FOPを実行する本体)

3. QRコードの作成

Apache-FOPには1次元バーコード(JAN, NW-7, CODE-39, ITF等)や2次元バーコード(QRコード)を生成する機能はありません。
サンプル・プログラムではPythonでSVG(イメージファイル)を作成する事で対応しています。また1次元バーコードもPythonで生成可能です。

4. サンプルプログラムで作成されるPDF

4.1 フォーム形式

パラメータ・ファイル(キー:QUOTATION)の第2パラメータが、quotationForm.xslの時

4.2 一覧形式

パラメータ・ファイル(キー:QUOTATION)の第2パラメータが、quotationList.xslの時

5. 補足:XSLT

XSLT(Extensible Stylesheet Language Transformations)は、作成済みのXMLファイルを別の形式に変換するツールです。
W3Cによって標準化されたXML文書の変換言語です。

No. 具体的な例
1 XML→XML
2 XML→HTML
3 XML→CSV

Apache-FOPでは、XMLデータを一度XSL-FO文書に変換すれば、PDFやPostScript、TIFF等様々な出力を行う事ができます。
Apache-FOPはデフォルトで、XSLTはXALAN (XSLT 1.0)を使用するようになっています。

今回のサンプル・プログラムではXSLT 2.0の機能を使用したほうが便利だったため、XSLT 2.0以降に対応したXSLTプロセッサーが必要です。
なお、Saxon 9.8以降でXSLT 3.0をサポートしています。(最新バージョンは、12.5)
(※XSLTの最新規格は、3.0です。 2017年勧告)

今回サンプルで使用するにあたって、XSLTプロセッサーはオープンソース・ソフトウェアのSaxon-HE 12.8を使用しました。
https://www.saxonica.com/download/java.xml
JavaでSaxonを使用するためには、Javaコマンドでシステム・プロパティの設定を行う必要があります。
具体的には、Javaコマンドのオプション -Djavax.tranform.TransformFactory=net.sf.saxon.TransformFactoryImplを指定します。
※今回のサンプルでは/opt/fop/libディレクトリーにSaxon関連のjarファイルを配置(コピー)する必要があります。

いいねと思ったらシェア
twitter
facebook
hatena
linkedin
関連記事
IBM i Apache-FOPによるPDF作成 | 第1回 | 概要
IBM i Apache-FOPによるPDF作成 | 第1回 | 概要
使ってみよう!Rational Developer for i
使ってみよう!Rational Developer for i
IBM i Apache-FOPによるPDF作成 | 第2回 | PASE環境へのApache-FOPインストールと実行するための設定
IBM i Apache-FOPによるPDF作成 | 第2回 | PASE環境へのApache-FOPインストールと実行するための設定
あなたにオススメの連載
Db2 for i & SQL活用 虎の巻
15記事
Db2 for i & SQL活用 虎の巻
IBM i の”新”必須言語 〜FFRPG入門〜
13記事
IBM i の”新”必須言語 〜FFRPG入門〜
できるIBM i 温故知新編
9記事
できるIBM i 温故知新編