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

IBM i Apache-FOPによるPDF作成 | 第2回 | PASE環境へのApache-FOPインストールと実行するための設定

IBM i Apache-FOPによるPDF作成 | 第2回 | PASE環境へのApache-FOPインストールと実行するための設定

→第一回「概要」(最終的にどのようなPDFが作成できるのか?)はこちら

1. PASE環境へのApache-FOP導入

PASE環境へのApache-FOP導入は「/opt/fop」に行います。必要な環境は下記のとおりです。
※この資料ではPythonがインストールされている前提です。

No. 項目 内容 備考
1 5250エミュレータ IBM i Client Access Solutions 1.1.9.6 エミュレータのコードページ 1399のセッションが必須
※Apache-FOPのインストールと設定時のみ
2 OS IBMi V7.5 TR 3 CCSID 5026 : 日本語カタカナ
3 Java JDK 8 Apace-FOP2.11のREADMEに記載されています。
4 Apache-FOP 2.11 Apacheのホームページからダウンロードする

2. Apache-FOPのダウンロード

Apache-FOPのダウンロードURL( https://xmlgraphics.apache.org/fop/download.html )からFOP-2.11-bin.zipをダウンロードします。

クリックするとダウンロードが始まります。
ローカルPCの適切なフォルダーに保存して下さい。(約23Mbyteです。)
今回はC:\TEMPに保存する例で説明します。

3. 3 Apache-FOPのPASE環境への導入

(※本資料では/opt/fop配下にApache-FOPを導入する想定です。)

3.1 Apache-FOPをインストールするディレクトリーを作成

5250エミュレータ(コードページ=1399)の画面で実行します。 ※5035系の英小文字が必須。
ユーザークラス *QPGMR 以上の権限を持つユーザーでサインオンします。
サインオン後、現行ジョブのCCSIDを1399に変更します。(CHGJOB CCSID(1399))
PASE環境に入ります。(qp2termコマンドの実行)
/opt/fopディレクトリーを作成します。(mkdir -p /opt/fop) ※英小文字です。注意願います。

※umask値を変更されている方は、作成したディレクトリーが適切なパーミッションになっている事を確認して下さい。
※umask値を変更されてない方(デフォルトではumask は00)は、パーミッションが、777 (rwxrwxrwx )になります。
※必ずls -ld コマンドで /optと /opt/fopディレクトリーのパーミッションを確認して下さい。rwxr-xr-x以上になっている必要があります。

この画面は後に使用しますので、このままの状態にしておきます。

3.2 Apache-FOPのftp転送とzipファイルの解凍

3.2.1 Apache-FOPをPASE環境へ転送

エクスプローラでC:\TEMPを開きます。(下記画面になります。)

「cmd」を入力し「Enterキー」を押すとコマンド・プロンプトが表示されます。コマンド・プロンプト画面にて作業します。

dirコマンドでダウンロードしたFOP-2.11-bin.zipが存在する事を確認します。
ftpコマンドでIBMiに接続し、/optにFOP-2.11-bin.zipをバイナリーモードでputします。(※詳細は下図を参照して下さい。)

3.2.2 PASE環境にてFOP-2.11-bin.zipを解凍

5250エミュレータ(コードページ=1399)の画面で操作します。1399のコードページで英小文字を入力する必要があります。

ls -l コマンドで/optにftp転送したFOP-2.11-bin.zipが存在する事を確認します。確認後、下記の手順を実行します。

手順 コマンド 説明
1 cd /opt カレント・ディレクトリーを/optに変更します。
2 jar-xvf fop-2.11-bin.zip jarコマンドでfop-2.11-bin.zipを解凍します。(※unzipコマンドはデフォルトでは存在しません。)
※/opt/fop-2.11ディレクトリーに解凍されます。
3 cd /opt/fop-2.11/fop cd /opt/fop-2.11/fopにカレント・ディレクトリーを変更します。
4 mv fop /opt/fop-2.11/fop.sh FOPシェル・スクリプトを一時的に名前変更し、ファイルの場所を/opt/fop-2.11に変更します。
5 mv * /opt/fop-2.11 残りの全てのファイルを/opt/fop-2.11に移動します。
6 cd /opt/fop-2.11 カレント・ディレクトリーをcd /opt/fop-2.11に変更します。
7 rmdir /opt/fop-2.11/fop 不要になった/opt/fop-2.11/fopディレクトリーを削除します。(中身は空のはず)
8 mv fop.sh fop 一時的に名前変更したfop.shを元のファイル名fopに戻します。
9 cd /opt
mv fop-2.11 fop
ディレクトリー/opt/fop-2.11を/opt/fopに名前変更します。
10 mkdir /opt/fop/font フォント用ディレクトリー/opt/fop/fontを作成します。

上記作業により/opt/fopディレクトリーにApache-FOPのプログラムを導入した事になります。

3.2.3 Apache-FOPの日本語設定

/opt/fop/conf/fop.xconfを修正します。

3.2.4 Apache-FOPの日本語フォント・コピー

本資料ではIPAゴシック・フォント(等倍フォント※exフォントではない。IPAexゴシックでも問題はありません。)を使う前提で説明します。
他のフォントを使用する場合は、必ず著作権に違反しないよう注意して下さい。
https://moji.or.jp/ipafont/ipa00303/からダウンロードします。

※この例では.TTFで説明していますが、.TTCが使えるかどうかは検証していません。

下記の様にftpでIPAゴシックフォント・ファイルをPASE環境の/opt/fop/fontにバイナリーモードで転送します。
/opt/fop/fontは/opt/fop/conf/fop.xconfに設定しています。(前述)

他にも使用するフォントがある場合は、同様に/opt/fop/fontに転送して下さい。

3.2.5 Apache-FOPのXMLプロセッサー設定

※この設定はWindowsでも同じです。
Apache-FOPのXMLプロセッサーはデフォルトでxalan (※XSLT1.0相当)です。
今回は、XSLT2.0の組み込み関数が必要です。

https://www.saxonica.com/html/download/java.htmlからJava版をダウンロードします。

続いて、/opt/fop/fopシェル・スクリプトを修正し、Saxonを使用するように記述します。
5250エミュレータでホスト・コードページを1399にしたセッションで実行します。サインオンはQPMGR以上の権限があるユーザーで行って下さい。

chgjob ccsid(1399)コマンドを実行し、現行ジョブのccsidを1399に変更します。
※ホスト・コードページを1399にしていると英小文字でもコマンドを実行できます。

edtf stmf(‘/opt/fop/fop’)コマンドを実行し、FOPシェル・スクリプトを修正します。
※edtfは日本語が使用できませんので注意して下さい。(使い方はSEUとほぼ同じです。)

Saxonを宣言する文字列を一度変数にセットし、セットした変数をJavaコマンドのオプション-Dで宣言します。
この設定を行う事で、XMLプロセッサーはSaxonを使用するようになります。編集終了後、F3を押す事で変更した内容が保存されます。続いて、もう一度F3を押すとedtfが終了します。

3.2.6 サンプルのファイルを転送

a.下記のシェル・スクリプトやPyhtonスクリプト等を/opt/fopに転送します。
※ftpで転送する場合は必ずバイナリーモードで行って下さい。

No.ファイル名内容
1 Logo.svg 電業のロゴファイル
2 quatationQr.py QRコードをsvg形式で作成するpythonスクリプト
3 chk_home_dir.sh /home下にユーザーのホーム・ディレクトリ・チェック
4 run_FOP.sh Apache-FOPを実行する本体のシェル・スクリプト
5 run_FOP2.sh run_FOP.shをフックするシェル・スクリプト ※DEBUGをし易くする為です。
6 quotationForm.xsl PDFを作成するFOPのスタイルシート(フォーム形式)
7 quotationList.xsl PDFを作成するFOPのスタイルシート(一覧形式)
8 quotation.xml テスト用サンプルXMLデータファイル(※フォント指定はIPAゴシック)

b.下記のバッチ・ファイルをC:\TESTフォルダーにコピー。(※このバッチ・ファイルはPCでPDFファイルを表示させるためのものです。)

No. ファイル名 保存先
1 FOPPDF.BAT C:\TEST ※パラメータ・ファイル ID=PC_CONFIGのパラメータに設定したもの

上記バッチ・ファイルはパラメータ・ファイルのID=PC_CONFIGの第一パラメータが*YESの時に実行します。

c.SAVFのリストア

No. 内容 コマンド
1 ライブラリー・リストに存在しているライブラリーに
SAVFを作成
CRTSAVF FILE(???LIB/SAVEXCEL)
2 PCからFTPでsavfを???LIB/SAVEXCELにバイナリー転送します。 転送元:IBM_I_EXCELLIB_V7R3M0_REL1.1.savf
転送先:???LIB/SAVEXCEL
3 転送したSAVFからライブラリーをRESTOREします。 RSTLIB LIB(EXCELLIB) DEV(*SAVF) SAVF(???LIB/SAVEXCEL)

d.サンプルデータでのApache-FOPの実行

5250エミュレータでホスト・コードページを1399にしたセッションで実行します。サインオンはQPMGR以上の権限があるユーザーで行って下さい。※Pythonがインストールされている前提です。

No 実行するコマンド 内容
1 chgjob ccsid(1399) 現行ジョブのccsidを1399に変更します。
2 call qp2term PASE環境のターミナルを開きます。
3 cd /opt/fop カレント・ディレクトリーを/opt/fopに変更。
4 python quoatationQr.py quotation.xml XmlデータからQRコードファイルを生成
5 ./fop -xml quotation.xml -xsl quotationForm.xsl -pdf test.pdf -c conf/fop.xconf FOPを実行。Test.pdfをカレント・ディレクトリーに生成。

生成されたPDFを確認したい場合は、ftpでPCにバイナリー転送しAdobe Reader等で確認して下さい。以下のようなPDFになります。

コラム:SVGファイルとは
(Adobeサイト https://www.adobe.com/jp/creativecloud/file-types/image/vector/svg-file.html の情報です。)

Scalable Vector Graphics(SVG)は、webに適したベクターファイル形式です。JPEGなどのピクセルベースのラスターファイルに対し、ベクターファイルは、グリッド上の点と線にもとづいて数式を使用して画像を保存します。つまり、SVGなどのベクターファイルは、品質を損なわずにサイズを大幅に変更できるため、ロゴや複雑なオンライングラフィックに最適です。
SVGがwebデザイナーに人気が高い理由は、そのサイズ変更機能だけではありません。SVGは、XMLコードで記述されています。つまり、あらゆるテキスト情報を、図形ではなく、そのままのテキストとして保存します。これにより、Googleなどの検索エンジンがSVGグラフィックのキーワードを読み取ることができるため、webサイトの検索ランキングを上げるために役立ちます。
SVGファイルは拡張子(.svg)で簡単に見分けることができます。

3.2.7 (補足)フォント名の見つけ方

Windowsで.ttfファイルのプロパティを表示し、「詳細」タブをクリックします。
タイトルに表示される文字列がフォント名です。
※フォント・ファイル名≠フォント名です。注意して下さい。

いいねと思ったらシェア
twitter
facebook
hatena
linkedin
関連記事
IBM i Apache-FOPによるPDF作成 | 第1回 | 概要
IBM i Apache-FOPによるPDF作成 | 第1回 | 概要
【IBM Power Salon】株式会社 電業 様が語る<br /> 「根っからのエンジニアが語る IBM i 内製化のリアル」実践編<br />~サンプルプログラムの流れ(PASE環境へのデータ転送及びプログラム起動)
【IBM Power Salon】株式会社 電業 様が語る
「根っからのエンジニアが語る IBM i 内製化のリアル」実践編
~サンプルプログラムの流れ(PASE環境へのデータ転送及びプログラム起動)
使ってみよう!Rational Developer for i
使ってみよう!Rational Developer for i
あなたにオススメの連載
Db2 for i & SQL活用 虎の巻
15記事
Db2 for i & SQL活用 虎の巻
IBM i の”新”必須言語 〜FFRPG入門〜
13記事
IBM i の”新”必須言語 〜FFRPG入門〜
できるIBM i 温故知新編
9記事
できるIBM i 温故知新編