個別にPDF変換
個別にPDF変換する目的は ?
この章で解説するPDF化とはPDFに変換して印刷することではなく
あくまでもPDFに変換して保管することを解説しています。
例えば、経理システムの貸借対照表や損益計算書は法定上、5年間の保存が義務付けられています。
しかしこれらの帳票を実際の印刷用紙に出力して保存するとなると、
- 印刷出力を行う時間
- 印刷用紙のコスト
- 出力用紙を保存しておくスペースと維持コスト
など時間やコストを費やしてしまうことになります。
そこでこれらをPDF変換して保存するようにすれば、これらのコストは圧倒的に少なくなります。
つまり特定の印刷出力業務がPDF化の対象となります。
これに対して売上伝票入力チェック・リストや製造計画表のようなものは
用途からみて実際に出力することが必要となってきますので PDF化の対象とはなりません。
スプール内の記号を判別するには
印刷したスプール内の記号を判別して処理を分岐する方法
印刷出力の端にでも独自の記号を出力しておいて、
それによって次の処理の分岐の判断を行うようにしたい場合があります。
【例】印刷スプールに *PDF という文字列のあるスプールは、
PDF変換して指定したPCサーバーに転送したい。
Spoolライターには CHKSPLF というコマンドが用意されています。
CHKSPLF をユーザーCLPに組み込めば *PDF という文字列が
含まれているかどうか検査することができます。
0001.00 PGM 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* TESTSPLFCL: CHKSPLF の使用サンプル */ 0004.00 /* */ 0005.00 /* [ 記述 ] この CLP は SPOOL ライター提供の CHKSPLF コマンドの */ 0006.00 /* 使用方法を示すサンプルです。 */ 0007.00 /* */ 0008.00 /*-------------------------------------------------------------------*/ 0009.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132) 0010.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) 0011.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) 0012.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) 0013.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) 0014.00 DCL VAR(&RES) TYPE(*LGL) 0015.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0016.00 DCL VAR(&STRING) TYPE(*CHAR) LEN(32) VALUE('*PDF') 0017.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10) 0018.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) + 0019.00 VALUE('*ESCAPE ') 0020.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) + 0021.00 VALUE(X'000074') /* 2 進数 */ 0022.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) + 0023.00 VALUE(X'00000000') 0024.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0025.00 0026.00 /*( 環境の取得 )*/ 0027.00 RTVJOBA TYPE(&TYPE) 0028.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0029.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ') 0030.00 ENDDO /* バッチ */ 0031.00 ELSE CMD(DO) /* 対話式 */ 0032.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ') 0033.00 ENDDO /* 対話式 */ 0034.00 0035.00 SPOOLWTR/CHKSPLF SPLF(QPDSPJOB) + 0036.00 JOB(031004/QTCP/QTCPSTSVRS) SPLNO(3) + 0037.00 STRING(&STRING (1 1 (66 132))) RESULT(&RES) 0038.00 IF COND(&RES *EQ '1') THEN(DO) 0039.00 CHGVAR VAR(&MSG) VALUE(&STRING *TCAT + 0040.00 ' が見つかりました。 ') 0041.00 ENDDO 0042.00 ELSE CMD(DO) 0043.00 CHGVAR VAR(&MSG) VALUE(&STRING *TCAT + 0044.00 ' は見つかりませんでした。 ') 0045.00 ENDDO 0046.00 CHGVAR VAR(&MSGTYPE) VALUE('*DIAG ') 0047.00 GOTO SNDMSG 0048.00 RETURN 0049.00 0050.00 APIERR: 0051.00 CHGVAR VAR(&MSGID) VALUE(%SST(&APIERR 9 7)) 0052.00 CHGVAR VAR(&MSGDTA) VALUE(%SST(&APIERR 17 100)) 0053.00 CHGVAR VAR(&MSGF) VALUE('QCPFMSG ') 0054.00 CHGVAR VAR(&MSGFLIB) VALUE('QSYS ') 0055.00 GOTO SNDMSG 0056.00 0057.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) + 0058.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + 0059.00 MSGFLIB(&MSGFLIB) 0060.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO) 0061.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + 0062.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE) 0063.00 ENDDO 0064.00 ELSE CMD(DO) 0065.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + 0066.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) + 0067.00 MSGTYPE(&MSGTYPE) 0068.00 ENDDO 0069.00 ENDPGM
PDFをどこに保存するか ?
PDF は IBM i に保存するのであれば IFS フォルダーに保存することになります。
しかし IBM i の HDD は信頼性は高いのですが高価であると同時に
大量の保存を行うと短期間のうちにHDD使用容量を増やしてしまいます。
そこで最近では信頼性の高くなったPCサーバーに
転送して保存する方法が一般的で普及しています。
別の社内PCサーバーの共有区画に転送して保存しておけば、
さらにCDR や DVD に記録しておけば
安全で劣化のない半永久的な保存を安価に実現することができます。
CVTSPLF コマンドを使えばPDF変換と同時に
別のPCサーバーにFTP転送することができます。
PDFをどのように転送するか ?
FTP による転送
PDFを最も簡単に転送するには FTP を使うことです。(FTP = File Transfer Protocol )
CVTSPLF コマンドでは FTP送信のためのオプションが用意されていて
出力オプション・パラメータ(OPTION)に *SEND を指定すれば、
PDF変換と同時に PDFを FTPで送信することができます。
このとき受入れ側のPCサーバーでも FTPサーバーが起動されていなければなりません。
相手側が PCサーバーでなく普通のWindows PCクライアントであっても構いません。
Windows PCでも FTPサーバーが起動されている必要があります。
この設定に関してはPCクライアントの設定を参照してください。
NetServer の QNTC に保管する
IFS には /QNTC という名前のフォルダーがありますが、
これは NetServer機能によって他のPCサーバーを IBM i のローカルHDD として見せるフォルダーです。
従って /QNTC 配下のフォルダーに CVTSPLF によってローカル保存すると
それは別のPCサーバーに保管したことになります。
この場合は相手側のPCサーバーまたはPCには FTPが起動されている必要はありませんが
事前に QNTC にPCサーバー用のフォルダーを作成しておくことと、
PCサーバー側では IBM i で使用している同じパスワードの
ユーザー・アカウントを事前に作成しておく必要があります。
くわしくは QNTC の設定 をご覧ください。
個別にPDF変換する方法とは ?
印刷スプールを個別にPDF変換するには CVTSPLFコマンドを使用します。
CVTSPLFコマンドの詳細は、こちらをご覧ください。
CVTSPLF をユーザーCLPに組み込むことによって
印刷スプールの出力が完了するとともに直後に CVTSPLFコマンドを実行します。
印刷スプールを個別に PDF変換するには
印刷出力のCLPに CVTSPLF コマンドを組み込みます
CLP の中では概ね次のような処理を行います。
- OVRPRTF でスプール・ファイルが直ちに印刷出力されないように
HOLD=*YES に設定する - 印刷出力プログラムを実行
- CVTSPLF コマンドによって PDF 化
- 印刷スプールを削除する
0001.00 PGM 0002.00 /*-------------------------------------------------------------------*/ 0003.00 /* PRINTER : WORKSHOP 印刷のサンプル CLP-CGI */ 0004.00 /* */ 0005.00 /* CRTCLMOD QTEMP/PRINTER SRCFILE(MYSRCFILE/QCLLESRC) AUT(*ALL) */ 0006.00 /* CRTPGM CGIBIN/PRINTER MODULE(QTEMP/PRINTER) */ 0007.00 /* BNDSRVPGM(ASNET.COM/RPGENGINE5) ACTGRP(*NEW) AUT(*ALL)*/ 0008.00 /* */ 0009.00 /*-------------------------------------------------------------------*/ 0010.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(80) 0011.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1) 0012.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10) + 0013.00 VALUE('WKSHOP ') 0014.00 DCL VAR(&JOB) TYPE(*CHAR) LEN(10) + 0015.00 VALUE('QPRTJOB ') 0016.00 DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) 0017.00 DCL VAR(&HNSFROM) TYPE(*CHAR) LEN(4) /* + 0018.00 品種コード FROM */ 0019.00 DCL VAR(&HNSEND) TYPE(*CHAR) LEN(4) /* + 0020.00 品種コード END */ 0021.00 DCL VAR(&SHFROM) TYPE(*CHAR) LEN(10) /* + 0022.00 商品コード FROM */ 0023.00 DCL VAR(&SHEND) TYPE(*CHAR) LEN(10) /* + 0024.00 商品コード END */ 0025.00 DCL VAR(&VALUE) TYPE(*CHAR) LEN(256) 0026.00 DCL VAR(&FIELD) TYPE(*CHAR) LEN(48) 0027.00 DCL VAR(&HTML) TYPE(*CHAR) LEN(256) + 0028.00 VALUE('/AS400-NET.USR/PROJECT/PRINTER/PRINT+ 0029.00 ER.HTML') 0030.00 DCL VAR(&NULL) TYPE(*CHAR) LEN(1) VALUE(X'00') 0031.00 DCL VAR(&PDF_FILE) TYPE(*CHAR) LEN(48) 0032.00 DCL VAR(&FLD) TYPE(*CHAR) LEN(20) + 0033.00 VALUE('$(PDF_FILE)') 0034.00 DCL VAR(&RTN) TYPE(*CHAR) LEN(5) 0035.00 DCL VAR(&DATETIME) TYPE(*CHAR) LEN(20) 0036.00 DCL VAR(&DATE) TYPE(*CHAR) LEN(6) 0037.00 DCL VAR(&TIME) TYPE(*CHAR) LEN(6) 0038.00 DCL VAR(&HH) TYPE(*DEC) LEN(2 0) 0039.00 DCL VAR(&HHC) TYPE(*CHAR) LEN(2) 0040.00 DCL VAR(&MM) TYPE(*DEC) LEN(2 0) 0041.00 DCL VAR(&MMC) TYPE(*CHAR) LEN(2) 0042.00 DCL VAR(&SS) TYPE(*DEC) LEN(2 0) 0043.00 DCL VAR(&SSC) TYPE(*CHAR) LEN(2) 0044.00 DCL VAR(&DIR) TYPE(*CHAR) LEN(256) 0045.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) 0046.00 0047.00 /*-------------------------------------------------------------*/ 0048.00 /*( 1 ) HTML からの入力値を取得する */ 0049.00 /*-------------------------------------------------------------*/ 0050.00 ADDLIBLE LIB(SPOOLWTR) 0051.00 MONMSG CPF2100 0052.00 RTVJOBA TYPE(&TYPE) DATETIME(&DATETIME) 0053.00 CHGVAR VAR(&DATE) VALUE(%SST(&DATETIME 3 6)) 0054.00 CHGVAR VAR(&TIME) VALUE(%SST(&DATETIME 9 6)) 0055.00 CALLPRC PRC(CGIPARM) PARM(('HNSFROM')) + 0056.00 RTNVAL(&VALUE) 0057.00 CHGVAR VAR(&HNSFROM) VALUE(&VALUE) 0058.00 CALLPRC PRC(CGIPARM) PARM(('HNSEND')) + 0059.00 RTNVAL(&VALUE) 0060.00 CHGVAR VAR(&HNSEND) VALUE(&VALUE) 0061.00 CALLPRC PRC(CGIPARM) PARM(('SHFROM')) + 0062.00 RTNVAL(&VALUE) 0063.00 CHGVAR VAR(&SHFROM) VALUE(&VALUE) 0064.00 CALLPRC PRC(CGIPARM) PARM(('SHEND')) + 0065.00 RTNVAL(&VALUE) 0066.00 CHGVAR VAR(&SHEND) VALUE(&VALUE) 0067.00 0068.00 /*-------------------------------------------------------------*/ 0069.00 /*( 2 ) 印刷プログラム PGM202 を呼び出して実行する */ 0070.00 /*-------------------------------------------------------------*/ 0071.00 OVRPRTF FILE(QPRINT) HOLD(*YES) SECURE(*YES) + 0072.00 OVRSCOPE(*JOB) 0073.00 OVRDBF FILE(LSHOHNS) TOFILE(QTRFIL/LSHOHNS) + 0074.00 SECURE(*YES) OVRSCOPE(*JOB) 0075.00 OVRDBF FILE(HINSHU) TOFILE(QTRFIL/HINSHU) + 0076.00 SECURE(*YES) OVRSCOPE(*JOB) 0077.00 CALL PGM(QTROBJ/PGM202) PARM(&HNSFROM &HNSEND + 0078.00 &SHFROM &SHEND) 0079.00 DLTOVR FILE(QPRINT LSHOHNS HINSHU) LVL(*JOB) 0080.00 0081.00 /*-------------------------------------------------------------*/ 0082.00 /*( 3 ) QPRTJOB の JOB 番号を検索する */ 0083.00 /*-------------------------------------------------------------*/ 0084.00 CALL PGM(ASNET.COM/PRTJOBNO) PARM(&USER &JOBNBR) 0085.00 /*-------------------------------------------------------------*/ 0086.00 /*( 4 ) SPOOL ライターによって PDF に変換して IFS に保管する */ 0087.00 /*-------------------------------------------------------------*/ 0088.00 CHGVAR VAR(&PDF_FILE) VALUE('PDF' *CAT &JOBNBR + 0089.00 *TCAT '.PDF') 0090.00 SPOOLWTR/CVTSPLF SPLF(QPRINT) JOB(&JOBNBR/&USER/&JOB) + 0091.00 SPLNO(*LAST) OUTPUT(*PDF) OPTION(*IFS) + 0092.00 TOSTMF(&PDF_FILE) + 0093.00 TODIR('/AS400-NET.USR/PROJECT/PRINTER') 0094.00 DLTSPLF FILE(QPRINT) JOB(&JOBNBR/&USER/&JOB) + 0095.00 SPLNBR(*LAST) 0096.00 RMVLIBLE SPOOLWTR 0097.00 0098.00 /*-------------------------------------------------------------*/ 0099.00 /*( 5 ) リダイレクト用の HTML テンプレートをオープンする */ 0100.00 /*-------------------------------------------------------------*/ 0101.00 CALLPRC PRC(OPENHTML) PARM((&HTML *BYVAL)) RTNVAL(&RTN) 0102.00 0103.00 /*-------------------------------------------------------------*/ 0104.00 /*( 6 ) PDF の名前を HTML テンプレートにセットする */ 0105.00 /*-------------------------------------------------------------*/ 0106.00 CHGVAR VAR(&VALUE) VALUE(&PDF_FILE) 0107.00 CALLPRC PRC(SETFLD) PARM((&FLD *BYVAL) (&VALUE *BYVAL)) 0108.00 0109.00 /*-------------------------------------------------------------*/ 0110.00 /*( 7 ) HTML テンプレートをブラウザに送出して完了 */ 0111.00 /*-------------------------------------------------------------*/ 0112.00 CALLPRC PRC(WRITE) 0113.00 0114.00 /*-------------------------------------------------------------*/ 0115.00 /*( 8 ) 10 分後に PDF を削除するように SBMJOB */ 0116.00 /*-------------------------------------------------------------*/ 0117.00 CHGVAR VAR(&HH) VALUE(%SST(&TIME 1 2)) 0118.00 CHGVAR VAR(&MM) VALUE(%SST(&TIME 3 2)) 0119.00 CHGVAR VAR(&SS) VALUE(%SST(&TIME 5 2)) 0120.00 CHGVAR VAR(&MM) VALUE(&MM + 10) 0121.00 IF COND(&MM >= 60) THEN(DO) 0122.00 CHGVAR VAR(&HH) VALUE(&HH + 1) 0123.00 CHGVAR VAR(&MM) VALUE(1) 0124.00 ENDDO 0125.00 CHGVAR VAR(&HHC) VALUE(&HH) 0126.00 CHGVAR VAR(&MMC) VALUE(&MM) 0127.00 CHGVAR VAR(&SSC) VALUE(&SS) 0128.00 CHGVAR VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC) 0129.00 CHGVAR VAR(&DIR) + 0130.00 VALUE('/AS400-NET.USR/PROJECT/PRINTER/' + 0131.00 *CAT &PDF_FILE) 0132.00 SBMJOB CMD(RMVLNK OBJLNK(&DIR)) JOB(RMVLNK) + 0133.00 SCDDATE(&DATE) SCDTIME(&TIME) MSGQ(*NONE) 0134.00 RETURN 0135.00 0136.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) 0137.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */ 0138.00 SNDPGMMSG MSG(&MSG) TOMSGQ(*SYSOPR) MSGTYPE(*COMP) 0139.00 ENDDO /* バッチ */ 0140.00 ELSE CMD(DO) /* 対話式 */ 0141.00 SNDPGMMSG MSG(&MSG) MSGTYPE(*DIAG) 0142.00 ENDDO /* 対話式 */ 0143.00 ENDPGM
【解説】
PCサーバーへの転送
PDFを作成してPCまたはPCサーバーへ転送する方法を解説します。
別のPCまたはPCサーバーにファイルを転送する方法は大きくわけて次の二つの方法があります。
FTP転送
FTPサーバーへ転送する方法です。
転送先となる相手方サーバーでは FTPサーバーが起動されている必要があります。
また転送元となる IBM i 側でも予め転送先の次の情報を
遠隔地ユーザー(QUSRSYS/RMTUSR)に登録しておく必要があります。
- 遠隔地ユーザー名(20A)
- 遠隔地IPアドレス(15A)
- パスワード(1024A)→パスワードは暗号化されて内部保存されます。
- テキスト(50O)
なお FTPサーバーは PCサーバーだけでなく Windows PCクライアントでも
今では FTPサーバーを起動させることができます。
Windows では、初期の状態では FTPは導入されていますが、起動はされていません。
また Windows PCクライアントでは FTPの起動だけでなくファイヤーウォールも
FTPサーバーとの通信が可能なように設定しなければなりません。
FTPサーバーを利用する転送方法はファイル転送の方法としては最も一般的で、
かつ、非常にわかりやすい操作であると言えます。
QNTC共有フォルダーへのコピー
IBM提供の IFSのフォルダーQNTC の配下に
遠隔PCサーバーのIPアドレスをフォルダー名として登録しておくと、
そのフォルダーにPDFを保管するだけで遠隔地のPCサーバーに保管したのと同じ機能となります。
ただし遠隔地のPCサーバーにもIBM i と同じユーザー、パスワードのユーザー・アカウントを作成して、
そのユーザーとのフォルダーを共有を設定しておく必要があります。
QNTC配下の共有フォルダーへPDFを補完することは PDFの作成(CVTSPLF) は
ローカルIFS のフォルダーに補完するのと操作も同じです。
保管フォルダー名が /QNTC/(IPアドレス(共有フォルダー) の形式になるだけです。
OUTQ で一括変換する
ある出力待ち行列(OUTQ) に投入されて印刷スプールを印刷ドライバーのように
次から次へと連続して自動的にPDF化することができます。
この機能が PDFドライバーです。
PDFドライバーはプリンターにPDFを送信してPDFを印刷するために使用するものではなく
(その目的の場合は LPRドライバーを使ってください。)
あくまでもPDF保管が目的です。
PDFドライバーはPDF印刷装置の中に組み込んで使用します。
OUTQ に関連づけられたPDF印刷装置(DEVD)はOUTQに投入されたスプールに対して
PDFドライバーを呼び出してPDF化を行った後で、PDF化が正常に完了すればそのスプールを削除します。
この動きも通常のプリンタ・ドライバーと同じです。
PDF印刷装置は、Spoolライターを導入するときに
PDFメニューの項目を選択して作成してください。
作成直後のPDF印刷装置はオンになっていないので、
使用前には手動で PDF印刷装置をオンする必要があります。
以降はIBM i の IPL時に自動的にオンに変更されます。
PDF印刷装置をオンに変更したあとは装置の処理(WRKWTR)を使って
OUTQ と関連づけてPDF印刷装置を開始(STRPRTWTR)してください。
PDF印刷装置を作成する(CRTDEVPDF) とi5/OSによって
同じ名前のOUTQも生成されているはずですので
通常はPDF印刷装置(DEVD)と同じ名前のOUTQ とを関連づけて装置を開始させます。(STRPRTWTR)
これも通常の印刷装置の操作と同じです。
PDFをどこへ転送するか ?
OUTQ に投入したスプールは、別のPCサーバーに転送するのですが
転送先は PDF印刷装置のリモート・ロケーション・パラメータとして指定することができます。
リモート・ロケーションとして
遠隔PCサーバーのIPアドレス : 遠隔ユーザー名: 相手先フォルダー名: 保管ファイル名
を登録しておくと、そのとおりに作成されたPDFが FTPによって送信されます。
保管ファイル名はスプールのファイル名、日付、時刻、スプールbネどの
情報を使って生成することもできます。
PDF印刷装置のリモート・ロケーション・パラメータを
LoopBack すなわち 127.0.0.1 として登録しておくと
PDFドライバーは投入されたスプールの実行元のユーザーにPDFを送信しようと試みます。
印刷スプールの情報から、その印刷スプールの作成を
実行元のIPアドレスを割り出して実行元のPC に転送を試みます。
この場合の実行元のPCは Windows であっても FTPサーバーを起動して、
なおかつ Windows のファイヤー・ウォールを設定しておかなければなりません。
送信に失敗したスプールは保留(H=HOLD)状態になります。
送信に成功したスプールはOUTQより除去されてなくなります。
転送先の登録
送信する相手先の情報(IPアドレス、ユーザー名、パスワード、保管フォルダー)などは
あらかじめ遠隔ユーザー(QUSRSYS/RMTUSR) に
遠隔ユーザーの処理(WRKRMTUSR)で登録しておく必要があります。
( ただし遠隔ユーザーの処理の実行には *IOSYSCFG の権限が必要です。)
つまり FTPで送信する相手にログインして保管するための情報の登録が必要になります。
遠隔ユーザーのパスワードは暗号化されて保管されますので
権限のある操作員が操作してもパスードを読み取ることはできないようになっています。
印刷サイズはどのようにして決まるのか?
SpoolライターVer5.0 の PDF 化には「ダイナミック・レイアウト」と呼ばれる機能があります。
これは印刷のフォント・サイズをすべての印刷データを読み取って用紙幅と長さ一杯に適切に
印刷されるようにフォント・サイズを自動的に計算して決定する機能のことです。
例えば用紙を「 A4 横方向」と指定したとします。
CVTSPLF コマンドは指定された印刷スプールのすべての印刷データを読み取って最大印刷行数と
最大印刷幅を調べて「 A4 横方向」を用紙サイズとして最大限に印刷可能となるフォント・サイズを
決定します。
この例では最大印刷幅は PAGE.4 であり最大印刷行数は PAGE.2 です。
つまり最大印刷幅は 12桁 であり最大印刷行数は 4行 であることがわかります。
この2つのサイズによって A4 横方向に目一杯に収まるフォント・サイズが決定されます。
RPG プログラムで印刷ファイルを 132桁 として定義していても実際は 80桁 までしか
印刷していないプログラムの例はめずらしくありません。
そのような場合だと印刷ファイルの属性によってフォント・サイズを決めると
横方向にかなりの部分の白紙エリアができてしまいます。
SpoolライターVer5.0 のダイナミック・レイアウト手法であれば
無駄な余白を作ることなく用紙に目一杯広がった適切なフォント・サイズとなり
見やすい PDF を生成することができます。
逆にモバイル・プリンターで A6 サイズのような小さな用紙に印刷したい場合も
プログラムを修正することなくフォント・サイズも最小化されますので
適切な印刷結果を得ることができます。
現在では多くのネットワーク・プリンターが PDF 印刷に対応していますので
適切な PDF を生成することは最適な印刷をすることに繋がります。
ただしダイナミック・レイアウトによる PDF 化や印刷は印刷の情報量によって
フォント・サイズが異なりますので同じプログラムによる同じ印刷結果であっても
印刷の情報量によってはフォント・サイズが異なることがあることを
ご承知ください。
9 月度の印刷結果と 10 月度の印刷結果の同じ種類の帳票を見比べてみた場合に
フォント・サイズが異なっているという違和感が出る場合があります。
これを合理的と判断するか同じフォント・サイズに統一したいと考えるかは
お客様の判断によります。
SpoolライターVer5.0 では省略時はダイナミック・レイアウトですが
意図的にページ・サイズを明示的に指定することもできます。
くわしくは CVTSPLF の解説をご参照ください。
アテンション・キーを押してPDF変換する
5250画面で今、実行した印刷プログラムの出力スプールをアテンション・キー(ATTN)を押すだけで
PDFに変換する機能が追加されました。
この機能を「テレワーク・キット」と呼びます。
ライブラリー:SPOOLWTR のプログラム: PDFKEY を次のようにアテンション・プログラムとして
登録してください。
SETATNPGM PGM(SPOOLWTR/PDFKEY) SET(*ON)
※アテンション・プログラム(ATNPGM)とは5250エミュレータでアテンション・キー(ATTN)を
押して起動する割り込みプログラムのことです。
アテンション・キー(ATTN)とは通常、キー・ボードの左上のESCキーのことです。
アテンション・プログラム(ATNPGM)はどのような業務の実行中であっても
アテンション・キー(ATTN)を押すことによって途中の割り込みとして
起動します。
テレワーク・キットの使用方法
・・・以下の説明は PDFKEY が既に SETATNPGMによって *ONになっているものとします。
(1) 最初にATTNキーを押してテレワーク・キットを起動します。
5250画面で ATTNキーを押すと次のようにメッセージが表示されます。
印刷スプール PDF 化の準備が完了しました。
このとき OVRPRTF *PRTF HOLD(*YES) が実行されて以降の印刷はすべて
*HLD となり印刷出力は凍結されます。(プリンタには出力されません)
(2) 印刷プログラムの実行
通常の処理として印刷プログラムを実行してください。
印刷出力はどこかのOUTQに出力されますが(1)の処理によって
プリンタには出力されずにOUTQに留まります。
(3) ATTNキーを押してPDF化を実行
今、印刷出力したスプールがテレワーク・キットによって瞬時に検索されて
PDFに変換されPCオーガナイザーによってブラウザ上にPDFが表示されます。
元のスプールは消去されます。
PDFはIBM iのIFSに一時的に保管されますが10分後には自動的に消去されます。
次に印刷したい業務があれば続けて印刷を実行したから
その後でATTNキーを押してPDF化してください。
印刷業務を続けて行って後からまためてATTNキーによって
連続してPDF化を繰り返すこともできます。
(4)テレワーク・キットの終了
PDF化の対象となるスプールはこのジョブで出力されたスプールで
状況が HLD となっているものだけです。
PDF化の対象となるスプールがこれ以上ない状態でATTNキーを
押すとテレワーク・キットは終了と見なして
印刷スプール PDF 化を終了しました。
とメッセージを出力します。
このとき DLTOVR *PRTF によって印刷出力の凍結は解除されますので
以降の印刷はプリンタに出力されるようになります。
ただしPDFKEYはアテンション・プログラム(ATNPGM)として
登録は続いていますので再びATTNキーを押せば
(1)が開始されます。
アテンション・プログラムのセットの方法
アテンション・プログラム : SPOOLWTR/PDFKEY の設定の方法について説明します。
(1) コマンド入力画面(QCMD)で SETATNPGM で設定する
コマンド入力画面で
SETATNPGM PGM(SPOOLWTR/PDFKEY) SET(*ON)
によって設定します。解除するには
SETATNPGM PGM(SPOOLWTR/PDFKEY) SET(*OFF)
を入力します。
ただしエンド・ユーザーに SETATNPGMコマンドの使わせることはできませんので
この方法は情報システム室がテストのため
(2) システム全体にセットする方法
CHGSYSVAL SYSVAL(QATNPGM) VALUE('PDFKEY SPOOLWTR ')
によって社内全員のアテンション・プログラムを設定します。
(実行には *ALLOBJ, *SECADM権限が必要です)
この設定は次にサイン・オンしたユーザーから有効になります。
(3) ユーザー別にセットする方法
CHGUSRPRF USRPRF(xxxxxxx) ATNPGM(SPOOLWTR/PDFKEY)
によってユーザー個別にアテンション・プログラムを設定します。
(この実行には *SECADM権限が必要です。)
この設定は次にサイン・オンしたユーザーから有効になります。
(4) ジョブ単位で行う場合
CLPに次のコマンドを入力してエンド・ユーザーに実行させてください。
SETATNPGM PGM(SPOOLWTR/PDFKEY) SET(*ON)
ただし SETATNPGMコマンドが実行されたスタック・レベルが終了すると
アテンション・プログラムの効力が失われてしまいます。
例えばあるCLプログラムの中に SETATNPGM を入れておいて実行しても
そのCLPが終了すれば SETATNPGMで指定した アテンション・プログラムの効力は
失われてしまいます。
このことは SETATNPGMを実行する何らかのCLPを作成して呼び出して実行したとしても
そのCLPが終了して戻った上位のプログラムではアテンションは効きません。
従ってジョブ単位でそのジョブが終了するまでアテンション・プログラムを
有効にしておくにはユーザー・プロフィールの初期プログラムの中で
SETATNPGM SPOOLWTR/PDFKEY SET(*ON) を実行させることです。
アテンション・プログラムを既に使用中である場合
・社内で既にアテンション・プログラムでATTNキーを利用している場合、
ATTNキーに SPOOLWTR/PDFKEYを割り当てることはできません。
そこで ATTNプログラム PDFKEYと同じ機能を実行するためのコマンド: PDFKEYが
用意されています。
[コマンド: PDFKEY ]
PDF 化 ATTN キー・プログラム (PDFKEY) 選択項目を入力して,実行キーを押してください。 キーのセットまたは PDF 化 . . *ON *ON, *PDF, *OFF 終り F3= 終了 F4=プロンプト F5= 最新表示 F12= 取り消し F13= この画面の使用法 F24= キーの続き
[解説]
ご覧のようにコマンド: PDFKEY は *ON(=準備), *PDF(=PDF化)と *PFF(=終了)
の3つのオプションを持っていますのでこれはアテンション・プログラムを
3回押すのと同じ機能を持っています。
従って社内で既にアテンション・プログラムでATTNキーを利用している場合でも
次のようなメニューをアテンション・プログラムで表示させてやればよいことに
なります。
[ATTNキー処理メニュー ]
ATNMNU アテンション処理メニュー システム : 次の中から1つを選んでください。 1. ジョブ・スプール・ファイルの処理 WRKJOB *SPLF 2. すべての出力待ち行列の処理 WRKOUTQ 3. WRKOUTQ QPRINT QRKOUTQ QPRINT 4. WRKOUTQ QPRINT テレワーク・キット 11. PDFKEY の準備 PDFKEY *ON 12. PDFKEY による PDF 化実行 PDFKEY *PDF 13. PDFKEY の終了 PDFKEY *OFF 選択項目またはコマンド ===> F3= 終了 F4= プロンプト F5= 活動状況 F6= メッセージ F9= コマンドの複写 F10= コマンド入力 F12= 取消し F13= 印刷制御
[解説]
11.PDFKEY の準備 (PDFKEY SET(*ON)) |
OVRPRTF *PRTF HOLD(*YES)によって 印刷スプールを凍結(HLD)します。 |
---|---|
12.PDFKEY による PDF 化実行(PDFKEY SET(*PDF)) |
印刷実行の後にこのオプションを実行すれば 印刷スプールがPDF化されます。 |
13.PDFKEY の終了(PDFKEY SET(*OFF)) |
DLTOVR *PRTF して終了します。 |
[プログラム個別にPDF化を組み込む方法]
操作によるのではなく各 CLプログラム内部にテレワーク・キットを簡単に組み込むことができます。
[例]
PGM : SPOOLWTR/PDFKEY SET(*ON)......... テレワーク・キットの準備 : CALL OBJLIB/MYPGM ............... 印刷プログラムを実行 : SPOOLWTR/PDFKEY SET(*PDF) ....... PDF化して表示 SPOOLWTR/PDFKEY SET(*OFF) ....... テレワーク・キットの終了 F24= キーの続き
スプール・ファイルの処理(WRKSPL)でPDF変換する
自分が出力したスプールだけが一覧で表示されてオプションで
PDF化できるコマンド: WRKSPL で簡単にPDF化かることができます。
[コマンド: WRKSPL ]
WRKSPL スプール・ファイルの処理 ジョブ : QPADEV000F ユーザー : QTR 番号 : 848604 選択項目を打鍵して実行キーを押してください。 1=PDF に変換して表示 5= スプールを表示 装置/ ユーザー 合計 OPT ファイル 待ち行列 ・データ 状況 ページ 部数 QPRINT QPRINT PGM102 RDY 1 1 QPRINT QPRINT PGM104 RDY 33 1 QPRINT QPRINT PGM104 RDY 33 1 QPRINT QPRINT PGM106 RDY 4 1 PGM108P QPRINT PGM108 RDY 1 1 終わり F3= 終了 F5= 最新表示 F11= ビュー2 F12= 取消し (C) COPYRIGHT OFFICE QUATTRO 2020.
[解説]
このスプール・ファイルの処理(WRKSPL)をアテンション・プログラムとして組み込んでおけば
適用業務を全く修正せがにテレワークで印刷をPDFとして受取ることができるようになります。
WRKSPLコマンドの利用方法はこちらでご覧ください。
AFPスプールのPDF変換
印刷装置タイプ: *AFPDSいわゆるAFP印刷スプールのPDF変換について
解説します。
SpoolライターVer5.0ではAFP印刷スプール(=高機能印刷)のPDF化も
CVTSPLFコマンドで行えるようになりました。
ただしAFP印刷スプール(=以降はAFPと略します)のPDF化は
内部的にはIBM CPYSPLFコマンドによって行われます。
これによってSpoolライターVer5.0がAFPをサポートすることになりりましたが
SpoolライターVer5.0のAFPサポートによって
ユーザーは次の利点を得ることができます。
(1) IBM CPYSPLFの障害が解決されます
IBM CPYSPLF によってAFPをPDF化しようとすると次の大きな問題があります。
・CHRSIZキー・ワードが無視される
AFP作成時のCHRSIZキー・ワードはCPYSPLFによって
無視されてしまいます。
・HIGHLIGHTキー・ワードが無視される
同様にHIGHLIGHTキー・ワードもCPYSPLFによって
無視されてしまいます。
しかしSpoolライターVer5.0のCRTEXPRTFコマンドによって
AFP印刷ファイルを再作成して CVTSPLFでPDF化すると
本来のCHRSIZ, HIGHLIGHTキー・ワードの機能が
有効になります。
詳細はCVTSPLFの解説を参照してください。
[注意]
・AFPDS印刷ファイルでPDF化する場合は必ず
CRTEXPRTFでAFP印刷ファイルを事前に作成してください。
(くわしくはCRTEXPRFの解説を参照してください)
・AFPスプールをSpoolライターVer5.0でご利用になる
お客さまは必ず開発支援サービスのご契約がご必要です。
(2) AFPスプールでSpoolライターVer5.0の機能が使えます
AFPスプールのサポートによって次のSpoolライターVer5.0の機能を
使用するとこができるようになりました。
・PDF保管
AFPスプールをPDF化してIFSに保管することができるように
なりました。
・PDF転送(SEND)
AFPスプールをPDF化して他のサーバーなどへ転送して
保管することができるようになりました。
・LPR/IPP/モバイル印刷
AFPスプールをPDF化してLPRヤIPP,モバイル印刷で
プリンタへ直接印刷することができるようになりました。
・メール転送(MAIL)
AFPスプールをPDF化してメールで転送することが
できるようになりました。
・FAX送信(FAX)
AFPスプールをPDF化してFAX送信できるようになりました。
・RTVSPLF(スプール・ファイル検索)
スプールの内容を調べるRTVSPLFでAFPスプールも内容も
調べることが可能になりました。
ただしAFXスプールは次の機能にはお使いにはなれません。
・拡張印刷(CRTEXPRTF)の拡張DDSキー・ワード
・スプール編集
・スプールの複製
・オーバーレイ印刷
・外字印刷
・WRKSPL
・暗号化
・QRコード印刷
・電帳法対策(PDF検索、タイフスフンプ)
(3) AFPのPDF変換のための必要条件
AFPスプールをPDFに変換するために次のライセンスが導入されていることが必要です。
・5770TS1 変換− AFP から PDF への変換
AFPスプールのPDF化のCHRSIZ, HIGHLIGHTキー・ワードを正常に
PDFに反映させるには次のライセンスが必要です。
・5769FNT ADVANCED FUNCTION PRINTING FONTS/400 ・5722IP1 IBM INFOPRINT SERVER FOR ISERIES ・5769FN1 ADVANCED FUNCTION PRINTING DBCS FONTS/400 ・5770AF1 IBM ADVANCED FUNCTION PRINTING UTILITIES
これらのライセンスは現在IBM によって無償配布されますが
OS媒体DVDなどのメディアには同梱されていません。
導入するにはIBM Fix Central のサイトよりダウンロードの上
最新PTFを適用する必要があります。
SpoolライターVer5.0のAFPサポートはこれらのAFP環境が
完備しているIBM i環境を前提としています。
これらの環境の確認はGO LICPGMでお客さまの責任として
ご確認ください。