→第一回「概要」(最終的にどのような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ファイルを表示します。
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ファイルを配置(コピー)する必要があります。









