それではいよいよ印刷スプールをPDF化してWeb表示するサンプルを紹介しよう。
印刷のWeb化手法としてユーザーがWebから入力した値に基づいて印刷プログラムを起動して
実行する。
作成された印刷スプールを、その場でPDF化してIFS に配置してこれを
Web公開すれば良い。
CLP によってIFSにジャンプする手法はこれまでに示してきたとおりである。
ここでは印刷スプールのPDF化についてのみ焦点を当てて解説することとする。
印刷スプールのPDF化については SpoolライターVer 3.0 を利用することがコスト面や操作面に
おいても優れている。
PDF化のためにAcrobat PDFライターや別のPCサーバーなども
必要でないし、もちろんPCへのダウンロードも必要ない。
すべてのPDF化は iSeries400の内部処理だけで完結するのである。
具体的には Spoolライター Ver 3.0 に提供されている「CVTSPLF
」コマンドを使用するだけ
である。
CVTSPLF
コマンドは任意の印刷スプールを TEXT / PDF / HTML / Word などに
変換、すなわち電子帳票化して IFS に保管することができる。
下記は CVTSPLFの実行中の様子である。
これさえわかれば後は従来のCLP-CGI と同じである。
CLP のソースを下記に紹介する。
0001.00 PGM 0002.00 /*---------------------------------------------------------*/ 0003.00 /* PDPRINTCL : 印刷スプールの PDF 化 */ 0004.00 /* */ 0005.00 /* この CLP は CGI として呼びだされて */ 0006.00 /* RPG : SMPRINT を実行して印刷出力を行います。 */ 0007.00 /* 印刷出力の結果は SPOOL ライターによって */ 0008.00 /* HTML 化されて直ちにブラウザへ戻されます。 */ 0009.00 /* */ 0010.00 /*---------------------------------------------------------*/ 0011.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80) 0012.00 DCL VAR(&ENBUFF) TYPE(*CHAR) LEN(2048) 0013.00 DCL VAR(&ENBUFFLN) TYPE(*CHAR) LEN(4) 0014.00 DCL VAR(&ENVARNAME) TYPE(*CHAR) LEN(20) + 0015.00 VALUE('QUERY_STRING') 0016.00 DCL VAR(&ENACTLN) TYPE(*CHAR) LEN(4) 0017.00 DCL VAR(&ENVARLN) TYPE(*CHAR) LEN(4) 0018.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(4) + 0019.00 VALUE(X'00000000') /* 2 進数 */ 0020.00 DCL VAR(&FRMCOD) TYPE(*CHAR) LEN(10) 0021.00 DCL VAR(&DTA001) TYPE(*CHAR) LEN(120) + 0022.00 VALUE('CONTENT-TYPE: TEXT/HTML') 0023.00 DCL VAR(&DTA002) TYPE(*CHAR) LEN(120) VALUE(' ') 0024.00 DCL VAR(&DTA003) TYPE(*CHAR) LEN(120) + 0025.00 VALUE('<HTML><HEAD><TITLE> 印刷 CLP</TITL+ 0026.00 E>') 0027.00 DCL VAR(&DTA004) TYPE(*CHAR) LEN(120) + 0028.00 VALUE('<META HTTP-EQUIV="CONTENT-TYPE" + 0029.00 CONTENT="TEXT/HTML; CHARSET="X-SJIS">') 0030.00 DCL VAR(&DTA005) TYPE(*CHAR) LEN(120) + 0031.00 VALUE('<META HTTP-EQUIV="REFRESH" + 0032.00 CONTENT="0;URL=HTTP://218.44.135.18/AS400-N+ 0033.00 ET.USR/PROJECT/SMPRINT/') 0034.00 DCL VAR(&DTA006) TYPE(*CHAR) LEN(120) + 0035.00 VALUE('</HEAD>') 0036.00 DCL VAR(&DTA007) TYPE(*CHAR) LEN(120) + 0037.00 VALUE('<BODY>') 0038.00 DCL VAR(&DTA008) TYPE(*CHAR) LEN(120) + 0039.00 VALUE('</BODY></HTML>') 0040.00 DCL VAR(&DATA) TYPE(*CHAR) LEN(960) 0041.00 DCL VAR(&HTML) TYPE(*CHAR) LEN(120) 0042.00 DCL VAR(&N) TYPE(*DEC) LEN(4 0) VALUE(1) 0043.00 DCL VAR(&POS) TYPE(*DEC) LEN(4 0) VALUE(1) 0044.00 DCL VAR(&OUTLN) TYPE(*CHAR) LEN(4) 0045.00 DCL VAR(&CRLN) TYPE(*CHAR) LEN(2) VALUE(X'1500') 0046.00 DCL VAR(&OUTPUT) TYPE(*CHAR) LEN(20) 0047.00 DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) VALUE('057084' 0048.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0049.00 0050.00 CHGVAR VAR(&OUTPUT) VALUE('P' *CAT &JOBNBR *TCAT + 0051.00 '.PDF') 0052.00 ADDLIBLE LIB(SPOOLWTR) 0053.00 MONMSG CPF2100 0054.00 /*( ブラウザからの入力値を取得 )*/ 0055.00 CHGVAR VAR(%BIN(&ENBUFFLN)) VALUE(2048) 0056.00 CHGVAR VAR(%BIN(&ENACTLN)) VALUE(0) 0057.00 CHGVAR VAR(%BIN(&ENVARLN)) VALUE(12) 0058.00 CALLPRC PRC(QtmhGetEnv) PARM(&ENBUFF &ENBUFFLN + 0059.00 &ENACTLN &ENVARNAME &ENVARLN &APIERR) 0060.00 CHGVAR VAR(&FRMCOD) VALUE(%SST(&ENBUFF 8 10)) 0061.00 /*---( 印刷プログラム SMPRINT の実行 )------------------------*/ 0062.00 OVRDBF FILE(SHOHIN) TOFILE(QTRFIL/SHOHIN) + 0063.00 OVRSCOPE(*JOB) 0064.00 OVRPRTF FILE(QPRINT) HOLD(*YES) SECURE(*YES) + 0065.00 OVRSCOPE(*JOB) 0066.00 CALL PGM(R520OBJ/SMPRINT) PARM(&FRMCOD) 0067.00 DLTOVR FILE(SHOHIN) LVL(*JOB) 0068.00 /*( SPOOLWTR/CVTSPLF による HTML 変換 )*/ 0069.00 SPOOLWTR/CVTSPLF SPLF(QPRINT) + 0070.00 JOB(&JOBNBR/QTMHHTP1/QPRTJOB) + 0071.00 SPLNO(*LAST) OUTPUT(*PDF) OPTION(*IFS) + 0072.00 PAGESIZE(*SPLF) BOOKMARK(*PAGNBR) + 0073.00 TOSTMF(&OUTPUT) + 0074.00 TODIR('/AS400-NET.USR/PROJECT/SMPRINT') 0075.00 /*( 変換後の保管場所にリダイレクト )*/ 0076.00 CHGVAR VAR(&DATA) VALUE(&DTA001 *CAT &DTA002 *CAT + 0077.00 &DTA003 *CAT &DTA004 *CAT &DTA005 *CAT + 0078.00 &DTA006 *CAT &DTA007 *CAT &DTA008) 0079.00 CHGVAR VAR(%BIN(&OUTLN)) VALUE(120) 0080.00 LOOP: CHGVAR VAR(&HTML) VALUE(%SST(&DATA &POS 120)) 0081.00 IF COND(&N *EQ 5) THEN(DO) 0082.00 CHGVAR VAR(&HTML) VALUE(&HTML *TCAT &OUTPUT *TCAT + 0083.00 '">') 0084.00 ENDDO 0085.00 CHGVAR VAR(&HTML) VALUE(&HTML *TCAT &CRLN) 0086.00 CALLPRC PRC(QtmhWrStout) PARM(&HTML &OUTLN &APIERR) 0087.00 IF COND(&N < 8) THEN(DO) 0088.00 CHGVAR VAR(&N) VALUE(&N + 1) 0089.00 CHGVAR VAR(&POS) VALUE(&POS + 120) 0090.00 GOTO LOOP 0091.00 ENDDO 0092.00 /*( 処理完了すればスプールを削除する。 )*/ 0093.00 DLTSPLF FILE(QPRINT) JOB(&JOBNBR/QTMHHTP1/QPRTJOB) + 0094.00 SPLNBR(*LAST) 0095.00 RETURN 0096.00 0097.00 ERROR: RCVMSG RMV(*NO) MSG(&MSG) 0098.00 SNDMSG: SNDPGMMSG MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP) 0099.00 DSPJOBLOG OUTPUT(*PRINT) 0100.00 ENDPGM
実際に上記のCLPを使ってPDF化の実行を行ってみる。
この リンク をクリックしてHTML画面が表示されたら,そのまま「検索」ボタンを押す。
印刷プログラムが実行されて、結果がPDFしとしてブラウザに表示されることをご確認頂きたい。
左ペインのPage をクリックするとPDFページ全体が表示される。
CVTSPLF
によるPDF変換はフォントを MSUIGothic を使用してるので
Acrobat PDFライターによるPDF変換に比べてコンテンツそのものが非常に
明瞭であると同時に
ページ毎のBookマークが追加されている。
Book マークはページ番号以外にも設定が可能である。
Spoolライター Ver 3.0 の「日本語PDFライター」はまだAPW などによる罫線や
倍角印字は
サポートしていない。
今後のリリース・アップの中でサポートされる予定である。
( PC側での変換ではもちろんサポートされている。)
iSeries400ベンダー・ソフトウェア製品の中でも「日本語PDFライター」が
搭載されたのは
初めての試みであると思う。
Spoolライター Ver 3.0 は、これ以外にも「ホスト変換」によって
初めてHPT (Host Print Transform) API を駆動する製品としても他に例を見ない。
インターフェースもHTMLをベースとする MS Outlook Express 風に一新された。
Ver 3.0 はあたかも新製品であるかのように、すべてが進化した。
また「日本語PDFライター」は今後ユーザーの要望に応じて随時拡張の予定である。
なお、読者がPDFの仕様を調べたいのであれば
書籍:アドビシステムズ著「PDFリファレンス第2版」が参考になる。