5577系プリンタで専用用紙に印刷していた業務を
廃止してPDFによる背景の印刷に変更することができます。
PDFの背景に専用用紙イメージの上に文字の印刷を
重ね合わせて印刷する手法のことをオーバーレイ印刷と
読んでいます。
[オーバーレイ印刷のサンプル]
_
オーバーレイ印刷には2つの方法があります。
■(1). DDSのOVERLAYキー・ワードを指定する
印刷フィル(PRTF)のDDSソースで OVERLAYキー・ワードに
IFSなどに保管してある画像イメージ・ファイル(*.JPGまたは*.PNG)を
指定します。
[ PRTF : TESTPRTF2 ]
ソースはこちらから
0001.00 A****************************************************************
0002.00 A** **
0003.00 A** PROGRAM ID : TESTPRTF(JU2145P) **
0004.00 A** PROGRAN NAME : 売掛元帳(新:請求先CD集計) **
0005.00 A** PROGRAM DESCRIPTION : **
0006.00 A** SYSTEM DIAGRAM ID : **
0007.00 A** **
0008.00 A** CREATION DATE : 95/06/30 **
0009.00 A** PROGRAMMER NAME : **
0010.00 A** **
0011.00 A** CHANGE HISTORY **
0012.00 A** UPDATE DATE : XX/XX/XX **
0013.00 A** PROGRAMMER : **
0014.00 A** **
0015.00 A** 使用標識 **
0016.00 A** N11 : 限度額 表示 **
0017.00 A** N12 : 伝票日付 グループインジケーション **
0018.00 A** **
0019.00 A****************************************************************
0020.00 A* 2000.02.04 : 西暦2000年日付表示対応 **
0021.00 A* 2001.05.23 : 請求予定日コード表示追加 **
0022.00 A* 2010.03.01 : 得意先名称26桁⇒32に変更 **
0023.00 A****************************************************************
0024.00 A** 見出し 1 **
0025.00 A****************************************************************
0026.00 A R #HED1
0027.00 A OVERLAY('/SPOOLWTR/URIKAKE.JPG' -
0028.00 A 0.02 0.5)
0029.00 A** LINE 1
0030.00 A* 2'PAGE-'
0031.00 A* SKIPB(1)
0032.00 A* 9PAGNBR
0033.00 A* EDTCDE(3)
0034.00 A* 28'('
0035.00 QTR A* WLHD01 4 0 30TEXT(' 年月 ')
0036.00 A* EDTWRD('0 / ')
0037.00 A* 35' 月 )'
0038.00 A WLPAGE 4 0 73TEXT(' ページ ')
0039.00 A EDTCDE(3)
0040.00 A** LINE 3
0041.00 A* 29' 売 掛 '
0042.00 A* SKIPB(2)
0043.00 A* WLTITL 30 52TEXT(' タイトル ')
0044.00 A 4' 大阪市天王寺区通天閣上る '
0045.00 A SKIPB(5)
0046.00 A** LINE 9
0047.00 A WLHD02 2 4TEXT(' 店コード ')
0048.00 A SKIPB(8)
0049.00 A 6'-'
0050.00 A WLHD03 2 7TEXT(' 地区コード ')
0051.00 A 9'-'
0052.00 A WLHD04 5 8TEXT(' 得意先コード ')
0053.00 A WLHD05 32 15TEXT(' 得意先名 ')
0054.00 A** LINE 10
0055.00 A* WLHD07 1 39TEXT(' 予定日コード1 ')
0056.00 A* SKIPB(9)
0057.00 A* WLHD08 1 40TEXT(' ハイフン ')
0058.00 A* WLHD09 2 41TEXT(' 予定日コード2 ')
0059.00 A* 49'( 限度額 ='
0060.00 A*N11 WLHD06 10 0 60TEXT(' 限度額 ')
0061.00 A* EDTCDE(1)
0062.00 A* 11 64' 青天 '
0063.00 A* 74')'
0064.00 A****************************************************************
0065.00 A** 明細行 1 **
0066.00 A****************************************************************
0067.00 A R #DTL1
0068.00 A**
0069.00 A 13' 前 残 '
0070.00 A SKIPB(13)
0071.00 A WLD101 10 0 56TEXT(' 前残 ')
0072.00 A EDTCDE(P)
0073.00 A****************************************************************
0074.00 A** 明細行 2 **
0075.00 A****************************************************************
0076.00 A R #DTL2
0077.00 A**
0078.00 A 3' '
0079.00 A SPACEB(1)
0080.00 A 12 WLD201 6 0 4TEXT(' 伝票日付 ')
0081.00 A EDTWRD('0 / / ')
0082.00 A WLD202 9 0 12TEXT(' 伝票№ ')
0083.00 A EDTCDE(Z)
0084.00 A WLD203 2 22TEXT(' 区分 ')
0085.00 A N21 WLD204 9 0 25TEXT(' 売上/仕入 ')
0086.00 A EDTCDE(P)
0087.00 A N22 WLD205 9 0 36TEXT(' 入金/支払 ')
0088.00 A EDTCDE(P)
0089.00 A N23 WLD206 8 0 46TEXT(' 消費税 ')
0090.00 A EDTCDE(P)
0091.00 A N24 WLD207 10 0 56TEXT(' 残高 ')
0092.00 A EDTCDE(P)
0093.00 A N13 WLD208 11 64TEXT(' 備考 ')
0094.00 A 13 WLD209 10 0 64TEXT(' 備考 ')
0095.00 A EDTCDE(P)
0096.00 A****************************************************************
0097.00 A** 合計行 **
0098.00 A****************************************************************
0099.00 A R #TTL
0100.00 A**
0101.00 A 14'*********'
0102.00 A SPACEB(2)
0103.00 A WLT104 9 0 25TEXT(' 売上/仕入 ')
0104.00 A EDTCDE(P)
0105.00 A WLT105 9 0 36TEXT(' 入金/支払 ')
0106.00 A EDTCDE(P)
0107.00 A WLT106 8 0 46TEXT(' 消費税 ')
0108.00 A EDTCDE(P)
0109.00 A WLT107 10 0 56TEXT(' 残高 ')
0110.00 A EDTCDE(P)
0111.00 A****************************************************************
0112.00 A** ダミー **
0113.00 A****************************************************************
0114.00 A R #DMY
0115.00 A**
0116.00 A ' '
0117.00 A SPACEB(1)
[コンパイル]
CRTEXPRTF FILE(QTROBJ/TESTPRTF2) SRCFILE(QTRSRC/QPRTSRC) PAGESIZE(66 132) OVRFLW(62)
LVLCHK(*NO) AUT(*ALL)
※コンパイルはIBM iのCRTPRTFコマンドではなくSpoolライターVer5.0が提供している
CRTEXPRTFコマンドを使ってコンパイルしてください。
※ OVERLAYキー・ワードの以前の説明はこちらで
_
■(2). CVTSPLF コマンドの前面オーバーレイ(FRONTOVL)キー・ワードに指定する
印刷プログラムがPRTFを使用していない場合は
CLPで CVTSPLFコマンドでPDF化するときに CVTSPLFコマンドの
前面オーバーレイ(FRONTOVL)キー・ワードにオーバーレイかる画像ファイルを
指定することができます。
[ CLP: MLTOVLCL ]
ソースはこちらから
0001.00 PGM
0002.00 /*-------------------------------------------------------------------*/
0003.00 /* MLTOVLCL : 複写式伝票をオーバーレイ印刷 */
0004.00 /* */
0005.00 /* 2023/02/28 作成 */
0006.00 /*-------------------------------------------------------------------*/
0007.00 DCL VAR(&MSG) TYPE(*CHAR) LEN(132)
0008.00 DCL VAR(&MSGID) TYPE(*CHAR) LEN(7)
0009.00 DCL VAR(&MSGF) TYPE(*CHAR) LEN(10)
0010.00 DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10)
0011.00 DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132)
0012.00 DCL VAR(&TYPE) TYPE(*CHAR) LEN(1)
0013.00 DCL VAR(&TOPGMQ) TYPE(*CHAR) LEN(10)
0014.00 DCL VAR(&MSGTYPE) TYPE(*CHAR) LEN(10) +
0015.00 VALUE('*ESCAPE ')
0016.00 DCL VAR(&APIERR) TYPE(*CHAR) LEN(116) +
0017.00 VALUE(X'000074') /* 2 進数 */
0018.00 DCL VAR(&NULL4) TYPE(*CHAR) LEN(4) +
0019.00 VALUE(X'00000000')
0020.00 DCLF FILE(QTROBJ/MLTOVLFM)
0021.00 DCL VAR(&DATE6) TYPE(*CHAR) LEN(6)
0022.00 DCL VAR(&DATE8) TYPE(*CHAR) LEN(8)
0023.00 /*( PDF 出力に必要な変数 )*/
0024.00 DCL VAR(&USER) TYPE(*CHAR) LEN(10) +
0025.00 VALUE('QTMHHTTP ')
0026.00 DCL VAR(&JOB) TYPE(*CHAR) LEN(10) +
0027.00 VALUE('AURORA_EGN')
0028.00 DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6)
0029.00 DCL VAR(&PDF_FILE) TYPE(*CHAR) LEN(48)
0030.00 DCL VAR(&PCCMD) TYPE(*CHAR) LEN(123)
0031.00 DCL VAR(&IPADR) TYPE(*CHAR) LEN(15)
0032.00 /*( IFS の削除に必要な変数 )*/
0033.00 DCL VAR(&PDF_LINK) TYPE(*CHAR) LEN(128)
0034.00 DCL VAR(&DATEC) TYPE(*CHAR) LEN(6)
0035.00 DCL VAR(&TIME) TYPE(*CHAR) LEN(6)
0036.00 DCL VAR(&HH) TYPE(*DEC) LEN(2 0)
0037.00 DCL VAR(&HHC) TYPE(*CHAR) LEN(2)
0038.00 DCL VAR(&MM) TYPE(*DEC) LEN(2 0)
0039.00 DCL VAR(&MMC) TYPE(*CHAR) LEN(2)
0040.00 DCL VAR(&SS) TYPE(*DEC) LEN(2 0)
0041.00 DCL VAR(&SSC) TYPE(*CHAR) LEN(2)
0042.00 MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR))
0043.00
0044.00 /*( 環境の取得 )*/
0045.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATEC)
0046.00 RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
0047.00 RTVJOBA TYPE(&TYPE) DATE(&DATE6)
0048.00 IF COND(&TYPE *EQ '0') THEN(DO) /* バッチ */
0049.00 CHGVAR VAR(&TOPGMQ) VALUE('*SYSOPR ')
0050.00 ENDDO /* バッチ */
0051.00 ELSE CMD(DO) /* 対話式 */
0052.00 CHGVAR VAR(&TOPGMQ) VALUE('*TOPGMQ ')
0053.00 ENDDO /* 対話式 */
0054.00 CHGVAR VAR(&DATE8) VALUE('20' *CAT &DATE6)
0055.00 CHGVAR VAR(&DATE) VALUE(&DATE8)
0056.00
0057.00 /*( プロンプト表示 )*/
0058.00 SNDRCVF RCDFMT(DSPHEAD)
0059.00 IF COND(&IN03 *EQ '1') THEN(RETURN)
0060.00
0061.00 /*( 実行 )*/
0062.00 OVRPRTF FILE(URIDEN) HOLD(*YES) SECURE(*YES) +
0063.00 OVRSCOPE(*JOB)
0064.00 CALL PGM(QTROBJ/MLTOVL)
0065.00 DLTOVR FILE(URIDEN) LVL(*JOB)
0066.00 /*-------------------------------------------------------------------*/
0067.00 /* (1) 売上伝票 */
0068.00 /*-------------------------------------------------------------------*/
0069.00 CHGVAR VAR(&PDF_FILE) +
0070.00 VALUE('URIAGE.PDF')
0071.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0072.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0073.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0074.00 TODIR('/AS400-NET.USR/TEMP') +
0075.00 FRONTOVL(('/SPOOLWTR/URIAGE.JPG'))
0076.00 CALLSUBR SUBR(DSPLY)
0077.00 /* GOTO DLTSPL */
0078.00 /*-------------------------------------------------------------------*/
0079.00 /* (2) 納品書 */
0080.00 /*-------------------------------------------------------------------*/
0081.00 CHGVAR VAR(&PDF_FILE) +
0082.00 VALUE('NOHIN.PDF')
0083.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0084.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0085.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0086.00 TODIR('/AS400-NET.USR/TEMP') +
0087.00 FRONTOVL(('/SPOOLWTR/NOHIN.JPG'))
0088.00 CALLSUBR SUBR(DSPLY)
0089.00 /*-------------------------------------------------------------------*/
0090.00 /* (3) 受領書 */
0091.00 /*-------------------------------------------------------------------*/
0092.00 CHGVAR VAR(&PDF_FILE) +
0093.00 VALUE('JURYO.PDF')
0094.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0095.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0096.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0097.00 TODIR('/AS400-NET.USR/TEMP') +
0098.00 FRONTOVL(('/SPOOLWTR/JURYO.JPG'))
0099.00 CALLSUBR SUBR(DSPLY)
0100.00 /*-------------------------------------------------------------------*/
0101.00 /* (4) 出荷指示 */
0102.00 /*-------------------------------------------------------------------*/
0103.00 /* GOTO PASS */
0104.00 SPOOLWTR/RMVSPLCHR SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0105.00 STRING((26 105 26 113) (28 105 28 113) +
0106.00 (30 105 30 113) (54 105 54 113) (56 105 +
0107.00 56 113) (57 105 57 113))
0108.00 CHGVAR VAR(&PDF_FILE) +
0109.00 VALUE('SHUKA.PDF')
0110.00 PASS:
0111.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0112.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0113.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0114.00 TODIR('/AS400-NET.USR/TEMP') +
0115.00 FRONTOVL(('/SPOOLWTR/SHUKA.JPG'))
0116.00 CALLSUBR SUBR(DSPLY)
0117.00 /*-------------------------------------------------------------------*/
0118.00 /* 処理したスプールを削除 */
0119.00 /*-------------------------------------------------------------------*/
0120.00 DLTSPL: DLTSPLF FILE(URIDEN) JOB(*) SPLNBR(*LAST)
0121.00 CHGVAR VAR(&MSG) +
0122.00 VALUE(' 売上伝票を発行しました。 ')
0123.00 GOTO SNDMSG
0124.00 RETURN
0125.00
0126.00 ERROR: RCVMSG MSGTYPE(*LAST) RMV(*NO) MSG(&MSG) +
0127.00 MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) +
0128.00 MSGFLIB(&MSGFLIB)
0129.00 SNDMSG: IF COND(&MSGID *EQ ' ') THEN(DO)
0130.00 SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) +
0131.00 TOMSGQ(&TOPGMQ) MSGTYPE(&MSGTYPE)
0132.00 ENDDO
0133.00 ELSE CMD(DO)
0134.00 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
0135.00 MSGDTA(&MSGDTA) TOMSGQ(&TOPGMQ) +
0136.00 MSGTYPE(&MSGTYPE)
0137.00 ENDDO
0138.00 /******************************/
0139.00 SUBR SUBR(DSPLY)
0140.00 /******************************/
0141.00 /*( IFS に保存された PDF を表示する )*/
0142.00 RTVDTAARA DTAARA(ASNET.USR/HTTPSVR (1 15)) RTNVAR(&IPADR)
0143.00 CHGVAR VAR(&PCCMD) VALUE('START HTTP://' *CAT +
0144.00 &IPADR *TCAT '/AS400-NET.USR/TEMP/' *CAT &PDF_FILE)
0145.00 CHGVAR VAR(&PCCMD) VALUE(&PCCMD *TCAT ' *PRINT')
0146.00 STRPCO PCTA(*NO)
0147.00 MONMSG MSGID(IWS4010)
0148.00 STRPCCMD PCCMD(&PCCMD) PAUSE(*NO)
0149.00 CALLSUBR SUBR(DLT_IFS)
0150.00 ENDSUBR
0151.00 /******************************/
0152.00 SUBR SUBR(DLT_IFS)
0153.00 /******************************/
0154.00 /*( 10 分後に一時ファイルを消す )*/
0155.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATEC)
0156.00 RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
0157.00 CHGVAR VAR(&HH) VALUE(%SST(&TIME 1 2))
0158.00 CHGVAR VAR(&MM) VALUE(%SST(&TIME 3 2))
0159.00 CHGVAR VAR(&SS) VALUE(%SST(&TIME 5 2))
0160.00 CHGVAR VAR(&MM) VALUE(&MM + 10)
0161.00 IF COND(&MM >= 60) THEN(DO)
0162.00 CHGVAR VAR(&HH) VALUE(&HH + 1)
0163.00 CHGVAR VAR(&MM) VALUE(1)
0164.00 ENDDO
0165.00 CHGVAR VAR(&HHC) VALUE(&HH)
0166.00 CHGVAR VAR(&MMC) VALUE(&MM)
0167.00 CHGVAR VAR(&SSC) VALUE(&SS)
0168.00 CHGVAR VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC)
0169.00 CHGVAR VAR(&PDF_LINK) +
0170.00 VALUE('AS400-NET.USR/TEMP/' *CAT +
0171.00 &PDF_FILE)
0172.00 SBMJOB CMD(RMVLNK OBJLNK(&PDF_LINK)) JOB(DLTIFS) +
0173.00 SCDDATE(&DATEC) SCDTIME(&TIME) MSGQ(*NONE)
0174.00 ENDSUBR
0175.00 ENDPGM
[コンパイル]
CRTCLPGM PGM(QTROBJ/MLTOVLCL) SRCFILE(QTRSRC/QCLSRC) OPTION(*SRCDBG) AUT(*ALL)
_
[解説]
このPDF化のサンプル・ソースは1回のプログラムの実行だけで4つの
PDFを生成するサンプルです。
・ (1) 売上伝票
・ (2) 納品書
・ (3) 受領書
・ (4) 出荷指示
と4部のPDFを生成します。
例えば
0066.00 /*-------------------------------------------------------------------*/
0067.00 /* (1) 売上伝票 */
0068.00 /*-------------------------------------------------------------------*/
0069.00 CHGVAR VAR(&PDF_FILE) +
0070.00 VALUE('URIAGE.PDF')
0071.00 SPOOLWTR/CVTSPLF SPLF(URIDEN) JOB(*) SPLNO(*LAST) +
0072.00 OUTPUT(*PDF) OPTION(*IFS) PAGESIZE(*A4 +
0073.00 *PORTRAIT) TOSTMF(&PDF_FILE) +
0074.00 TODIR('/AS400-NET.USR/TEMP') +
0075.00 FRONTOVL(('/SPOOLWTR/URIAGE.JPG'))
にして FRONTOVL((‘/SPOOLWTR/URIAGE.JPG’)) によってオーバーイレイ印刷を
指示しています。
また特に(4) 出荷指示ではPDF変換の直前に
0104.00 SPOOLWTR/RMVSPLCHR SPLF(URIDEN) JOB(*) SPLNO(*LAST) + 0105.00 STRING((26 105 26 113) (28 105 28 113) + 0106.00 (30 105 30 113) (54 105 54 113) (56 105 + 0107.00 56 113) (57 105 57 113))
によって スプール内の特定の文字列を消去しています。
RMVSPLCHRコマンドとはスプールの特定の位置にある文字列だけをブランクに置き換える
コマンドです。
つまり物理的な複写印刷でカーボン紙がなく意図的に複写しないようにしているのと
同じです。
最後によくお客さまから質問のある10分後にIFSのPDFを自動的に
削除するサブ・ルーチンは次のとおりです。
0151.00 /******************************/
0152.00 SUBR SUBR(DLT_IFS)
0153.00 /******************************/
0154.00 /*( 10 分後に一時ファイルを消す )*/
0155.00 RTVSYSVAL SYSVAL(QDATE) RTNVAR(&DATEC)
0156.00 RTVSYSVAL SYSVAL(QTIME) RTNVAR(&TIME)
0157.00 CHGVAR VAR(&HH) VALUE(%SST(&TIME 1 2))
0158.00 CHGVAR VAR(&MM) VALUE(%SST(&TIME 3 2))
0159.00 CHGVAR VAR(&SS) VALUE(%SST(&TIME 5 2))
0160.00 CHGVAR VAR(&MM) VALUE(&MM + 10)
0161.00 IF COND(&MM >= 60) THEN(DO)
0162.00 CHGVAR VAR(&HH) VALUE(&HH + 1)
0163.00 CHGVAR VAR(&MM) VALUE(1)
0164.00 ENDDO
0165.00 CHGVAR VAR(&HHC) VALUE(&HH)
0166.00 CHGVAR VAR(&MMC) VALUE(&MM)
0167.00 CHGVAR VAR(&SSC) VALUE(&SS)
0168.00 CHGVAR VAR(&TIME) VALUE(&HHC *CAT &MMC *CAT &SSC)
0169.00 CHGVAR VAR(&PDF_LINK) +
0170.00 VALUE('AS400-NET.USR/TEMP/' *CAT +
0171.00 &PDF_FILE)
0172.00 SBMJOB CMD(RMVLNK OBJLNK(&PDF_LINK)) JOB(DLTIFS) +
0173.00 SCDDATE(&DATEC) SCDTIME(&TIME) MSGQ(*NONE)
0174.00 ENDSUBR
…このようにオーバーレイ印刷の方法は印刷の事情に応じて2通りの方法が
用意されています。
印刷用のDDSがないお客さまであってもCVTSPLFのパラメータにオーバーレイを
指定することができるようになっています。
_
