I keep getting asked this question: If I generate a spool file with a bar code in it and I copy it to PDF will the bar code still display?
I wrote about copying spool files to PDF in the IFS in March 2014. What I am going to describe here is based on that post.
If the people who ask the question had read that post they would have discovered how simple this is.
Let me start with the externally described printer file, as I have not used Output specifications for prints in nigh on 30 years. The printer file's definition only needs two lines:
01 A R TESTLINE SKIPB(001) 02 A TESTDATA 10A 10BARCODE(CODE3OF9) |
Line 1: The printer record format definition.
Line 2: I am going to generate a Code 3 of 9 barcode. There is no reason I chose this as opposed to the many others that are available.
When the printer file is compiled it must be compiled with the "Printer device type", DEVT, as *AFPDS.
Create Printer File (CRTPRTF) Type choices, press Enter. File . . . . . . . . . . . . . . FILE > PRTFILE Library . . . . . . . . . . . > MYLIB Source file . . . . . . . . . . SRCFILE > DEVSRC Library . . . . . . . . . . . > MYLIB Source member . . . . . . . . . SRCMBR *FILE Generation severity level . . . GENLVL 20 Flagging severity level . . . . FLAG 0 Device: DEV Printer . . . . . . . . . . . *JOB Printer device type . . . . . . DEVT > *AFPDS ← Here |
The RPG program is similarly simple.
01 **free 02 dcl-f PRTFILE printer ; 03 TESTDATA = '1234567890' ; 04 write TESTLINE ; 05 *inlr = *on ; |
Line 2: Definition of the printer file, PRTFILE.
Line 3: Some value is moved to the barcode's field.
Line 4: The record format is written.
Line 5: And I am done.
There are two easy ways to copy the generated spool file to the IFS as PDF.
I prefer this first way as it does not generate a spool file in IBM i, it generates the PDF directly.
01 PGM 02 DCL VAR(&PATH) TYPE(*CHAR) LEN(100) + VALUE('/home/RPGPGM/barcode.pdf') 03 RMVLNK OBJLNK(&PATH) 04 MONMSG MSGID(CPFA0A9) 05 OVRPRTF FILE(PRTFILE) + 06 DEVTYPE(*AFPDS) + 07 TOSTMF(&PATH) + 08 WSCST(*PDF) + 09 OVRSCOPE(*CALLLVL) 10 CALL PGM(PRTFPGM) 11 ENDPGM |
Line 2: I need to specify the path name in more than once place so I define a variable to contain it, rather than repeat is more than once.
Lines 3 and 4: I delete the PDF file if it is present in the IFS folder.
Lines 5 – 9: I override the printer file, PRTFILE, to have the attributes I need: *AFPDS and *PDF.
Line 10: I call the program, PRTFPGM, to generate the "spool file", but there is not one as the PDF is generate directly.
When I open the "Integrated File System" tool in ACS I can find the PDF file in my folder.
And when I open that file I can see the barcode.
The other method I have used is to copy an existing spool file to the IFS.
01 PGM 02 CALL PGM(PRTFPGM) 03 CPYSPLF FILE(PRTFILE) + 04 TOFILE(*TOSTMF) + 05 SPLNBR(*LAST) + 06 TOSTMF('/home/RPGPGM/barcode.pdf') + 07 WSCST(*PDF) + 08 STMFOPT(*REPLACE) 09 ENDPGM |
Line 2: This time the program to generate the spool file is called first.
Lines 3 – 8: I use the Copy Spool File command, CPYSPLF, to copy the spool file to a PDF in my folder.
The disadvantage of this method is that as a spool file is generated it will need to be deleted.
Yes, it is that simple.
If the above does not work you need to go to the original post I wrote in 2014, here, and check if the required license program is installed.
This article was written for IBM i 7.4, and should work for some earlier releases too.
Thank you
ReplyDelete