PDF変換

個別に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 の解説をご参照ください。