c# asp.net pdf viewer : Adding page numbers to a pdf in reader SDK software service wpf winforms html dnn sg24625035-part1970

Appendix C. Extracting AFP resource contents 
333
C.2.2  IBM Toolbox for Java or JTOpen
The IBM Toolbox for Java is a library of Java classes that give Java programs 
easy access to iSeries or AS/400 data and resources. JTOpen is the open source 
version of Toolbox for Java.
There are two ways to obtain the IBM Toolbox for Java:
• Client Access Express
• IBM Toolbox for Java Web site 
C.2.2.1  Loading IBM Toolbox for Java from Client Access Express
IBM Toolbox for Java is shipped as part of Client Access Express. If you have not 
yet installed it, perform Selective Setup. For information on installing Client 
Access components, refer to 
Client Access Express for Windows - Setup
available from the iSeries Information Center at: 
http://publib.boulder.ibm.com/pubs/html/as400/infocenter.html
The installation process of Client Access Express Java Toolbox  creates a 
directory (\Program Files\IBM\Client Access\jt400\lib). Within that directory, a file 
called JT400.zip or JT400.jar exists, depending on what release of Client Access 
you are using. If you have the JT400.zip file, do 
not
unzip it. 
C.2.2.2  Loading IBM Toolbox for Java from the Web
If you are not running Client Access Express, follow these steps to download the 
IBM Toolbox for Java from the IBM Toolbox for Java and JTOpen Web site at: 
http://www-1.ibm.com/servers/eserver/iseries/toolbox/downloads.htm
1. From the Web site, select the link to IBM Toolbox for Java and JTOpen.
2. You are prompted to supply a user ID and password to register.
3. Enter the registration information and click Accept License.
4. Select Single File Download: jtopen_x_xx.zip. It is a very large file (over 
13MB) with over 1,300 files. You only need one file from within it.
5. Select a temporary directory to which to download it.
6. Create a directory called 
JTOpen
on your hard drive.
7. Run an unzip program. Select only the /lib/jt400.jar file and direct it to the 
JTOpen directory. 
C.2.3  Preparing your Windows environment
Once you obtain the necessary software, modify your Windows environment to 
access the necessary resources automatically. You do this by updating PATH and 
CLASSPATH. The method for doing this depends on the version of Microsoft 
Windows operating system you are running. 
C.2.3.1  Setting PATH and CLASSPATH in Windows 95 or 98
For Windows 95 or Windows 98, the additions are made in the AUTOEXEC.BAT 
file. 
These are examples of PATH and CLASSPATH statements that are added to the 
end of an AUTOEXEC.BAT file. In this case, the JTOpen version of the toolbox is 
downloaded from the Web, which explains the JTOpen entry:
Adding page numbers to a pdf in reader - insert pages into PDF file in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide C# Users to Insert (Empty) PDF Page or Pages from a Supported File Format
add page number to pdf print; add a page to a pdf file
Adding page numbers to a pdf in reader - VB.NET PDF Page Insert Library: insert pages into PDF file in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document
adding page to pdf; add blank page to pdf
334
iSeries Printing VI: Delivering the Output of e-business
rem path & classpath entries added for AS400 toolbox - extract resources
SET PATH=%PATH%;c:\jdk1.x.x_xx\bin
SET CLASSPATH=%CLASSPATH%;c:\JTOpen\lib\jt400.jar
C.2.3.2  Setting PATH and CLASSPATH in Windows NT or 2000
For Windows NT or 2000, update PATH and CLASSPATH using a GUI interface:
1. Right-click My Computer.
2. Select Properties.
3. Select the Environment tag.
4. Enter 
PATH
for Variable and 
c:\jdk1.x.x_xx\bin
for Value.
5. Repeat these steps for CLASSPATH and the appropriate entry for the jt400.* 
file.
C.2.4  Entering and compiling the program
The sample program is listed in C.2.6, “Sample Java program listing” on 
page335. You may enter the program using any ASCII text editor. If you are 
reading this document in a softcopy format, you may be able to cut and paste the 
code. Windows Notepad suffices for a short program such as this one. There are 
other more sophisticated editors for Java programming available that provide 
built-in formatting and color coding. VisualAge for Java is such an offering from 
IBM.
Give your Java source program a 
.java
file extension. The name of the file must 
match the name given in the 
class
statement, which is ExportAFP.java in this 
example. Be aware that Java language, and even the program name, is 
case-sensitive. To compile the program, enter the following information at C:\>: 
javac ExportAFP.java
This creates the ExportAFP.class class module.
C.2.5  Running the sample program
The program expects the following parameters to be passed to it:
• Library name
• The names of any number of AFP resource objects 
The AFP resource object names must be entered with the appropriate name 
extension as shown in Table32. 
Table 32.  Resource file name extensions
Resource object type
Resource file name extension
Overlay
.OVL
Page segment
.PAGSEG
Font resource
.FNTRSC
Page definition
.PAGDFN
Form definition
.FORMDF
C# Create PDF Library SDK to convert PDF from other file formats
PDF document file but also offer them the ability to count the page numbers of generated Besides, using this PDF document metadata adding control, you
add page numbers to pdf online; add contents page to pdf
C# Word - Word Create or Build in C#.NET
but also offer them the ability to count the page numbers of generated Besides, using this Word document adding control, you can add some Create Word From PDF.
add page number to pdf file; add page numbers to pdf document in preview
Appendix C. Extracting AFP resource contents 
335
To extract the overlay called INVOICE and three page segments (SS2TOP, 
SSBOT1, and SSWM) from library MSHNIER, enter the following command:
java ExportAFP MSHNIER INVOIC.OVL SS2TOP.PAGSEG SSBOT1.PAGSEG SSWM.PAGSEG
The iSeries server name, user ID, and password are not hard coded in the 
program. You are prompted to enter that information at run time as shown in 
Figure212. You may enter the system name or its IP address (such as 
9.29.5.13).
Figure 212.  Enter system name, user ID, and password 
If you want, you can modify the program to include any, or all three, of the 
parameters. See the comment lines in the program listing that begin with “//” for 
syntax. If you choose to hard code your password in the program, you must make 
sure you protect your copy of the program source and compiled class object from 
unauthorized use.
The names given to the exported objects are generated by adding 
.afp
to the end 
of the original object name. For example, the contents of INVOICE.OVL is 
exported to invoice.ovl.afp. The IBM AFP Viewer may be used to view overlay and 
page segment objects that use this naming convention.
The program writes a status message for each file it extracts. Figure213 shows 
an example of the screen you see after running the program.
Figure 213.  Example of running Java ExportAFP program
C.2.6  Sample Java program listing
Figure214 contains the sample program described in this appendix. 
As mentioned earlier, the program name is case-sensitive. However, the 
program was written to accept the parameters in upper or lowercase. 
Therefore, it would be equally acceptable to enter the command as:
java ExportAFP mshnier invoic.ovl ss2top.pagseg ssbot1.pagseg sswm.pagseg
Note
C:\AFPJava>java ExportAFP MSHNIER INVOIC.OVL SS2TOP.PAGSEG SSBOT1.PAGSEG SSWM.PAGSEG
Exporting /QSYS.LIB/MSHNIER.LIB/INVOIC.OVL to C:\AFPJava\invoic.ovl.afp
Exporting /QSYS.LIB/MSHNIER.LIB/SS2TOP.PAGSEG to C:\AFPJava\ss2top.pagseg.afp
Exporting /QSYS.LIB/MSHNIER.LIB/SSBOT1.PAGSEG to C:\AFPJava\ssbot1.pagseg.afp
Exporting /QSYS.LIB/MSHNIER.LIB/SSWM.PAGSEG to C:\AFPJava\sswm.pagseg.afp
336
iSeries Printing VI: Delivering the Output of e-business
Figure 214.  Sample Java program for extracting AFP resources
import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AFPResource;
import com.ibm.as400.access.PrintObjectInputStream;
import java.io.File;
import java.io.FileOutputStream;
public class ExportAFP {
public static void main(String args[]) {
AS400 as400 = new AS400();
// You may hardcode the system, username and/or password as follows.     
// AS400 as400 = new AS400("system", "username", "password");  
try {
int resourceCount = args.length;
String libraryPath = "/QSYS.LIB/" 
+ args[0].toUpperCase() 
+ ".LIB/";
String resourcePath;
AFPResource resourceObj;
File outputFile;
FileOutputStream outputStream;
PrintObjectInputStream afpDataStream;
byte[] buffer = new byte[4096];
int bytesRead;
for ( int i=1; i<resourceCount; i++ ) {
resourcePath = "/QSYS.LIB/" 
+ args[0].toUpperCase() 
+ ".LIB/" 
+ args[i].toUpperCase();
resourceObj = new AFPResource(as400, resourcePath);
afpDataStream = resourceObj.getInputStream();
outputFile = new File(args[i].toLowerCase() + ".afp");
outputStream = new FileOutputStream(outputFile);
System.out.println("Exporting " 
+ resourcePath 
+ " to " 
+ outputFile.getAbsolutePath());
while ( (bytesRead = afpDataStream.read(buffer)) != -1 )
outputStream.write(buffer, 0, bytesRead);
outputStream.close();
afpDataStream.close();
}
as400.disconnectAllServices();
System.exit(0);
} catch (Exception fmv) {
System.out.println(fmv);
as400.disconnectAllServices();
System.exit(-1);
}
}
© Copyright IBM Corp. 2002. All rights reserved.
337
Appendix D.  
Output queue monitor
Some of the formatting tools described in this document may require you to 
change the attributes of your printer files. For example, if you want to use the form 
definitions and page definitions created using Infoprint Designer for iSeries or 
PPFA, you must use printer files that are defined with DEVTYPE(*LINE). Other 
parameters in the printer file also must be changed, such as the FORMDF and 
PAGDFN parameters. 
Unfortunately, many customers may not be in a position to make these changes 
for any of the following reasons:
• They do not have access to the source code from their vendor.
• They use the same printer file (often QSYSPRT) for all applications. 
• They are concerned about having the changes overwritten if their vendor ships 
a new release of their software.
• They do not have the programming skills to make the changes.
One solution is to build an output queue monitor. This document provides 
guidance on how to do this. 
D.1  How an output queue monitor works
The spooled files continue to be generated by the application untouched. Each 
output queue you want to monitor has an entry in its definition for the DTAQ 
parameter. This points to an existing data queue object. Multiple output queues 
may point to the same data queue. Any time a spooled file is placed in the output 
queue in a RDY state, or if its state changes to RDY, an entry is added to the data 
queue with the spooled file name, job identifier, and output queue name.
The output queue monitor, a never-ending batch job, constantly checks for 
information arriving in the data queue. When it finds a new entry, the logic of the 
program can determine what to do with that spooled files and take appropriate 
action. 
Do not use an output queue that is associated with an active printer writer for 
monitoring. You do not want conflicts between the writer trying to print your 
spooled file while the monitor attempts to perform other processing on it. 
D.1.1  Basic logic of an output queue monitor
Your output monitor likely requires a combination of CL and some other high level 
language, such as RPG. Use CL commands to perform the object manipulation, 
such as changing spooled file attributes. The RPG, or other language programs, 
may be used for the table lookups or to call system API programs.
Assuming you have SCS spooled files, and you cannot modify the way they are 
created, you may want to use Infoprint Designer to enhance your output. This 
would be the basic logic to use in your monitor programs:
1. Use the system API QRCVDTAQ to read the record from the data queue and 
to identify the spooled file you want to process. For more information about 
338
iSeries Printing VI: Delivering the Output of e-business
using QRCVDTAQ, refer to the iSeries Information Center at: 
http://publib.boulder.ibm.com/pubs/html/as400/infocenter.html
To learn more about using the data queue reference in an output queue, and 
the layout of the information within it, see
 iSeries Printer Device Programming
SC41-5713.
2. Perform a table or file lookup to find out how that file should be handled. For 
example, what is the destination output queue and the name of the form 
definition and page definition objects that you created using Infoprint Designer 
that are to be used? 
In some cases, enough information is provided from the data queue entry, 
such as the spooled file name, job or user name, or output queue, to uniquely 
determine the resulting action. In other cases, you must call system API 
QUSRSPLA to Retrieve Spooled File Attributes to obtain more information on 
which to make the decision. The information retrieved about the spooled file 
includes data stream type, page size, overlay name, user data, and form type, 
among other things. For more information about QUSRSPLA, see 
AS/400 
System API Reference
, SC41-5801,
or the iSeries Information Center on the 
Web. 
3. Use the Copy Spooled File (CPYSPLF) command to copy the spooled file to a 
physical file. To preserve the page and line spacing of the original spooled file, 
you must capture the carriage control information in the first byte of the file. To 
do this, make sure you specify 
CTLCHAR(*FCFC)
in your CPYSPLF command, 
and make sure the target physical file record length is one more than the 
longest record in the spooled file. 
4. Create or modify a printer file based on the requirements of the application. In 
the case of Infoprint Designer applications, you must specify 
DEVTYPE(*LINE)
the form definition name
(
FORMDF
), the page definition name
(
PAGDFN
), and the 
target output queue
(
OUTQ
). You must also specify 
CTLCHAR(*FCFC)
so it knows 
to use the first byte as the carriage control information rather than as data.
If the form definition you use specifies duplex or different paper sources, you 
also must specify 
DUPLEX(*FORMDF)
or 
DRAWER(*FORMDF)
5. Copy the data from the physical file to this new printer file using CPYF. This 
automatically creates a new spooled file.
6. Delete the original spooled file or move it to a hold or done queue.
Along with the monitor program, a robust system must also include housekeeping 
functions, such as error checking and table maintenance. If there is a problem, 
and the monitor ends abnormally, spooled files may have to be held and released 
to put a record back in the data queue. 
The newly generated spooled file ends up being “owned” by the user who 
started the monitor program rather than the original owner. Therefore, the 
original owner is not able to perform a WRKSPLF command with the default 
parameters to see their new files. One suggestion is to pick up the original 
user’s name from the job information that is picked up from the data queue 
and place it in the USRDTA field of the printer file.
Note
Appendix D. Output queue monitor 
339
D.2  Other examples of use
Output queue monitors are not specific to the conversion of *SCS to *LINE. They 
can be used any time you require processing on a spooled file external to the 
original application that created it.
D.2.1  Monitor for sending spooled files to AIX
You can use an output queue monitor to send spooled files to another machine 
where the destination, or other options, are variable- or parameter-driven. 
Appendix H in 
AS/400 Printing Redbook V
, SG24-2160, describes using an 
output queue monitor for sending AS/400 spooled files to an Infoprint Manager for 
AIX server.
D.2.2  Supplementing the APU monitor function
Advanced Print Utility (APU) uses a built-in output queue monitor to automate the 
reformatting of the spooled files. Each entry in the Monitor Action table contains 
selection criteria based on the output queue and the spooled file. However, if 
there are a large number of different unique spooled file designs to be sent to a 
large number of printers, the number of entries that you require in the APU 
monitor table may become unmanageable. A custom monitor that selects the 
print definition and the destination queue independently provides a more 
manageable solution.
D.3  Sample monitor shell program
This section contains a listing for a shell that may be used as a basis for your own 
monitor program. The mainline program shown here is CVTS0021. It calls 
CVTS0022 to perform the file manipulation. You must create CVTS0022 to suit 
your own requirements, such as conversion from SCS to LINE, including any 
table lookups to determine the appropriate form definition and page definition 
names.
You must also add additional instructions in the ERROR HANDLING section.
/*                                                                   */
/*    ***********************************************************    */
/*    *                                                         *    */
/*    *    PROGRAM    CVTS0021                                  *    */
/*    *                                                         *    */
/*    *    By         Roger Drolet    rdrolet@ca.ibm.com        *    */
/*    *    DATE       May 1999                                  *    */
/*    *                                                         *    */
/*    *    @ COPYRIGHT IBM CANADA 1999                          *    */
/*    *    This software (source code and compiled objects)     *    */
/*    *    is the property of IBM Canada Ltd.                   *    */
/*    *    No guarantees or warranties are made or implied.     *    */
/*    *    The user is expected to carry out testing to his     *    */
/*    *    or her own satisfaction.                             *    */
/*    ***********************************************************    */
/*                                                                   */
/*                                                                   */
/*    CVTS0021 - READ DTAQ AND CONVERT SPOOL FILE                    */
/*                                                                   */
/*    This Program:                                                  */
/*    - Wait up to 300 seconds to receive an entry from              */
/*      the data queue                                                */
/*    - If no entry read, it check if the program should end         */
/*      The program stop if:                                         */
/*          - Job was cancel with a ENJOB command                    */
/*          - Subsystem was stop    ENDSBS command                   */
340
iSeries Printing VI: Delivering the Output of e-business
/*          - System shut down      PWRDWNSYS command                */
/*    - If the entry is "STOP" program stop immediately               */
/*    - Split the entry in fields                                    */
/*    - Call program CVTS0022 to do the spool file conversion */
/*    - Move or Delete the spool file                                */
/*    - Return wait for an entry                                     */
/*                                                                   */
/*-------------------------------------------------------------------*/
/*                                                                   */
/*      PROGRAM CHANGES                                              */
/*                                                                   */
/*      VERSION   DATE   PROGRAMMER DETAIL                          */
/*              YY/MM/DD                                             */
/*                                                                   */
/*      1.0     99/05    RDROLET     INITIAL VERSION                 */
/*                                                                   */
/*-------------------------------------------------------------------*/
PGM
DCL        &DTAQNAME  *CHAR   10  VALUE(CVTSDTAQ)
DCL        &DTAQLIB   *CHAR   10  VALUE(*LIBL)
DCL        &ENTLEN    *DEC     5  VALUE(128)
DCL        &ENTRY     *CHAR  128
DCL        &WAIT      *DEC     5  VALUE(300)
DCL        &ENDSTS    *CHAR    1
DCL        &SPLFIL    *CHAR   10
DCL        &JOBNAM    *CHAR   10
DCL        &JOBUSR    *CHAR   10
DCL        &JOBNBR    *CHAR    6
DCL        &SPLNBRB   *CHAR    4    /* BINARY    */
DCL        &SPLNBRD   *DEC     6    /* DECIMAL   */
DCL        &SPLNBR    *CHAR    6    /* CHARACTER */
DCL        &OUTQN     *CHAR   10
DCL        &OUTQL     *CHAR   10
DCL        &USRDTA    *CHAR   10
/* ----------------------------------------------------------------- */
/* RECEIVE AN ENTRY FROM THE DTAQ (FIRST IN FIRST OUT)               */
/* ----------------------------------------------------------------- */
RCVDTAQ:    CALL       PGM(QRCVDTAQ) PARM(&DTAQNAME &DTAQLIB +
&ENTLEN &ENTRY &WAIT)
/* ----------------------------------------------------------------- */
/* CHECK IF AN ENTRY WAS RECEIVE OR TIMEOUT                          */
/* ----------------------------------------------------------------- */
IF         COND(&ENTLEN *EQ 0) THEN(GOTO CMDLBL(TIMEOUT))
/* ----------------------------------------------------------------- */
/* CHECK IF THE ENTRY RECEIVE IS THE "STOP" COMMAND                  */
/* ----------------------------------------------------------------- */
IF         COND(%SST(&ENTRY 1 4) *EQ 'STOP') THEN(GOTO +
CMDLBL(END))
/* ----------------------------------------------------------------- */
/* READ THE FIELD FROM THE RECEIVE ENTRY                             */
/* ----------------------------------------------------------------- */
CHGVAR     &JOBNAM   VALUE(%SST(&ENTRY 13 10))
CHGVAR     &JOBUSR   VALUE(%SST(&ENTRY 23 10))
CHGVAR     &JOBNBR   VALUE(%SST(&ENTRY 33 6))
CHGVAR     &SPLFIL   VALUE(%SST(&ENTRY 39 10))
CHGVAR     &SPLNBRB  VALUE(%SST(&ENTRY 49 4))
CHGVAR     &SPLNBRD  VALUE(%BIN(&SPLNBRB))
CHGVAR     &SPLNBR   &SPLNBRD
/* ----------------------------------------------------------------- */
/* CALL PROGRAM CVTS0022 TO WORK WITH THE SPOOL                      */
/* ----------------------------------------------------------------- */
CALL       PGM(CVTS0022) PARM(&ENTRY &OUTQN &OUTQL +
&USRDTA)
/* ----------------------------------------------------------------- */
/* Move or Delete the spool file                                     */
/* ----------------------------------------------------------------- */
IF         COND(&OUTQN *EQ '*DELETE') THEN(DLTSPLF +
FILE(&SPLFIL) +
Appendix D. Output queue monitor 
341
JOB(&JOBNBR/&JOBUSR/&JOBNAM) +
SPLNBR(&SPLNBR) SELECT(*ALL))
ELSE       CMD(CHGSPLFA FILE(&SPLFIL) +
JOB(&JOBNBR/&JOBUSR/&JOBNAM) +
SPLNBR(&SPLNBR) SELECT(*ALL) +
OUTQ(&OUTQL/&OUTQN) USRDTA(&USRDTA))
/* ----------------------------------------------------------------- */
/* GO READ NEXT ENTRY IN THE DTAQ                                    */
/* ----------------------------------------------------------------- */
GOTO       CMDLBL(RCVDTAQ)
/* ----------------------------------------------------------------- */
/* TIME OUT (CHECK IF THE JOB MUST END)                              */
/* ----------------------------------------------------------------- */
TIMEOUT:    RTVJOBA    ENDSTS(&ENDSTS)
IF         COND(&ENDSTS *EQ '1') THEN(GOTO CMDLBL(END))
ELSE       CMD(GOTO CMDLBL(RCVDTAQ))
GOTO       CMDLBL(RCVDTAQ)
/* ----------------------------------------------------------------- */
/* ERROR HANDLING                                                    */
/*                                                                   */
/* ----------------------------------------------------------------- */
ERROR:
GOTO       CMDLBL(RCVDTAQ)
END:        ENDPGM
342
iSeries Printing VI: Delivering the Output of e-business
Documents you may be interested
Documents you may be interested