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のパラメータにオーバーレイを
指定することができるようになっています。
_