Here's the reference publication numbers:
AFP Line Data Programming Guide ha3l2mst (that's an l not a 1).
MODCA Reference ha3m6mst
IOCA Reference c3168055
PTOCA Reference ha3p2m00
MODCA is the document content stream. Within a MODCA document you can have various image and print object streams. IOCA is the image content, PTOCA is print. There's another, GOCA, for graphic objects like pie charts and graphs if the printer knows how to do them.
AFP is a super/sub-set of MODCA. There are a few extra tags in AFP that introduce various MODCA constructs. AFP Line allows you to describe a page and then pass a set of data for each page.
A PAGSEG, for example, is a MODCA object with IOCA content. Actually it doesn't have to be IOCA, but it usually is used for IOCA content. A PAGSEG is an AFP Resource object on the i. Put your MODCA stream containing the IOCA in a physical file and run the CRTPAGSEG command.
You may want to investigate using a DDS-defined Print File and using that as a "driver" within your java methods with the JT400 file objects. A print file can reference a PAGSEG or OVERLAY or any other AFP resource. Note that the AFP resources you name in your print file operations is not bound to the spool file until the AFP print writer runs.
-----Original Message-----
From: java400-l-bounces@xxxxxxxxxxxx [mailto:java400-l-bounces@xxxxxxxxxxxx] On Behalf Of Thorbjørn Ravn Andersen
Sent: Monday, January 17, 2011 1:46 AM
To: 'Java Programming on and around the IBM i'
Subject: RE: Printing MO:DCA P documents from Java?
Thanks. Much appreciated.
Looks like I need to read up on this IOCA thing :)
I'll report back if I ever get this to work :-S
Thanks again,
/Thorbjørn
-----Original Message-----
From: java400-l-bounces@xxxxxxxxxxxx [mailto:java400-l-bounces@xxxxxxxxxxxx]
On Behalf Of Dan Kimmel
Sent: 13. januar 2011 15:10
To: Java Programming on and around the IBM i
Subject: RE: Printing MO:DCA P documents from Java?
I wrote this in RPG, more as an exercise to refresh my RPG skills than anything. It could easily be done in java. The routine that follows writes all the lines to the PAGSEG source. It pulls info from the TIFF page that has been analyzed in prior module and set up so writeAPagSeg can reference it directly by tag pointer. I have actually done the TIFF tag analysis portion in java. fwrite in here is the C standard library function and could be writing directly to a file output stream or to a user space.
TIFF and IOCA objects both contain a compressed image. Most of the time it's a JPEG if color or a CCITT Group 4 if bitonal. This handles either.
pwriteAPagSeg b export
d pi
d tagPointerArrayPointer...
d * value
d fileOutStream * value
d tag273 s *
d tag279 s *
d tag296 s *
d tag282 s *
d tag283 s *
d tag256 s *
d tag257 s *
d tag259 s *
d hres s 10u 0
d vres s 10u 0
d i s 10u 0
d ds
d iocaBuffer 4a
d tiffTagPointer s *
D/copy DKDEVLIB/QRPGLESRC,TIFFTAGSTR
c/free
// look for tags that require special processing
for i=1 to tagCount;
tiffTagPointer = tagPointerArray(i);
select;
when tagID=273;
tag273= tagPointerArray(i);
when tagID=279;
tag279= tagPointerArray(i);
when tagID=296;
tag296= tagPointerArray(i);
when tagID=282;
tag282= tagPointerArray(i);
hres = tagValue(1)/tagValue(2);
when tagID=283;
tag283= tagPointerArray(i);
vres = tagValue(1)/tagValue(2);
when tagID=256;
tag256= tagPointerArray(i);
when tagID=257;
tag257= tagPointerArray(i);
when tagID=259;
tag259= tagPointerArray(i);
endsl;
endfor;
// stream over open physical file in QTEMP
fwrite(
x'5A0010D3A85F0000004040404040404040': // Begin Page Segment
1:17:fileOutStream);
fwrite(
x'5A0020D3EEEE000000'+'RJS PAGSEG Builder c2006': // NOP
1:33:fileOutStream);
fwrite(
x'5A0010D3A8FB0000004040404040404040': // Begin Image Object
1:17:fileOutStream);
fwrite(
x'5A0010D3A8C70000004040404040404040': // Begin Object Environment
1:17:fileOutStream);
fwrite(
x'5A001CD3A66B000000': // Object Area Descriptor
1:9:fileOutStream);
fwrite(
x'034301': // triplet X43 Descriptor Position
1:3:fileOutStream);
fwrite(
x'084B0000': // triplet X4B Measurement Unit
1:4:fileOutStream);
tiffTagPointer=tag282;
fwrite(
makeByteIOCA(iocaBuffer:2:14400):
// makeByteIOCA(iocaBuffer:2:10*tagValue(1)/tagValue(2)): // H resolution 2 byte
1:2:fileOutStream);
hres = tagValue(1)/tagValue(2);
tiffTagPointer=tag283;
fwrite(
makeByteIOCA(iocaBuffer:2:14400):
// makeByteIOCA(iocaBuffer:2:10*tagValue(1)/tagValue(2)): // V resolution 2 byte
1:2:fileOutStream);
fwrite(
x'094C02': // triplet X4C Object Area Size
1:3:fileOutStream);
fwrite(
x'00': //
1:1:fileOutStream);
tiffTagPointer=tag256;
fwrite(
makeByteIOCA(iocaBuffer:2:tagValue(1)/hres*1440): // H size 2 byte
1:2:fileOutStream);
fwrite(
x'00': //
1:1:fileOutStream);
tiffTagPointer=tag257;
fwrite(
makeByteIOCA(iocaBuffer:2:tagValue(1)/vres*1440): // V size 2 byte
1:2:fileOutStream);
fwrite(
x'5A0020D3AC6B000000': // Object Area Position
1:9:fileOutStream);
fwrite(
x'011700000000000000002D00': //con't
1:12:fileOutStream);
fwrite(
x'0000000000000000002D0000': // con't
1:12:fileOutStream);
fwrite(
x'5A000DD3ABFB0000000005030410': // Map Image Object
1:14:fileOutStream);
fwrite(
// x'5A001BD3A6FB000000': // Image Data Descriptor
x'5A0015D3A6FB000000': // Image Data Descriptor
1:9:fileOutStream);
tiffTagPointer=tag296;
select;
when tagValue(1)=2;
fwrite(
x'00': // unit base - 10 inches
1:1:fileOutStream);
when tagValue(1)=3;
fwrite(
x'01': // unit base - 10 centimeters
1:1:fileOutStream);
when tagValue(1)=1;
fwrite(
x'02': //unit base - logical ratio
1:1:fileOutStream);
other;
fwrite(
x'03': //unit base - logical ratio
1:1:fileOutStream);
endsl;
tiffTagPointer=tag282;
fwrite(
makeByteIOCA(iocaBuffer:2:10*tagValue(1)/tagValue(2)): // H resolution 2 byte
1:2:fileOutStream);
tiffTagPointer=tag283;
fwrite(
makeByteIOCA(iocaBuffer:2:10*tagValue(1)/tagValue(2)): // V resolution 2 byte
1:2:fileOutStream);
tiffTagPointer=tag256;
fwrite(
makeByteIOCA(iocaBuffer:2:tagValue(1)): // H size 2 byte
1:2:fileOutStream);
tiffTagPointer=tag257;
fwrite(
makeByteIOCA(iocaBuffer:2:tagValue(1)): // V size 2 byte
1:2:fileOutStream);
// fwrite(
// x'F60400000000': // image color triplet
// 1:6:fileOutStream);
fwrite(
x'F702010A': // function set ID
1:4:fileOutStream);
fwrite(
x'5A0008D3A9C7000000': // End Object Environment
1:9:fileOutStream);
// now the IOCA stuff in Image Picture Data tags
fwrite(
x'5A000AD3EEFB0000007000': // Begin Segment
1:11:fileOutStream);
fwrite(
x'5A000BD3EEFB0000009101FF': // Image Content':
1:12:fileOutStream);
fwrite(
x'5A0013D3EEFB0000009409': // Image Size -- first two bytes
1:11:fileOutStream);
tiffTagPointer=tag296;
select;
when tagValue(1)=2;
fwrite(
x'00': // 10 inches
1:1:fileOutStream);
when tagValue(1)=3;
fwrite(
x'01': // 10 centimeters
1:1:fileOutStream);
when tagValue(1)=1;
fwrite(
x'02': // logical
1:1:fileOutStream);
other;
fwrite(
x'03': // who knows?
1:1:fileOutStream);
endsl;
tiffTagPointer=tag282;
fwrite(
makeByteIOCA(iocaBuffer:2:10*tagValue(1)/tagValue(2)): // H resolution 2 byte
1:2:fileOutStream);
tiffTagPointer=tag283;
fwrite(
makeByteIOCA(iocaBuffer:2:10*tagValue(1)/tagValue(2)): // V resolution 2 byte
1:2:fileOutStream);
tiffTagPointer=tag256;
fwrite(
makeByteIOCA(iocaBuffer:2:tagValue(1)): // H size 2 byte
1:2:fileOutStream);
tiffTagPointer=tag257;
fwrite(
makeByteIOCA(iocaBuffer:2:tagValue(1)): // V size 2 byte
1:2:fileOutStream);
fwrite(
x'5A000CD3EEFB0000009502':
1:11:fileOutStream);
tiffTagPointer=tag259;
select;
when tagValue(1)=1;
fwrite(
x'0301':// Image Encoding - No Compression - RIDIC
1:2:fileOutStream);
when tagValue(1)=2;
fwrite(
x'8001':// Image Encoding - 1D - RIDIC
1:2:fileOutStream);
when tagValue(1)=3;
fwrite(
x'8101':// Image Encoding - G3 MMR - RIDIC
1:2:fileOutStream);
when tagValue(1)=4;
fwrite(
x'8201':// Image Encoding - G4 MMR - RIDIC
1:2:fileOutStream);
when tagValue(1)=5;
fwrite(
x'0D01':// Image Encoding - LZW - RIDIC
1:2:fileOutStream);
when tagValue(1)=6;
fwrite(
x'8301': // Image Encoding - JPEG - RIDIC
1:2:fileOutStream);
other;
fwrite(
x'0301':
1:2:fileOutStream);
endsl;
//fwrite(
// x'5A000BD3EEFB000000960101': // IDE size -- 1 bit per
pixel
// 1:12:fileOutStream);
//fwrite(
// x'5A000BD3EEFB000000970100': // LUT-ID - standard
// 1:12:fileOutStream);
tiffTagPointer = tag279;
for i = 1 to tagValueCount;
doTheChunks(fileOutStream:tag273:i:tagValue(i));
ENDFOR;
fwrite(
x'5A000AD3EEFB0000009300': // End Image Content
1:11:fileOutStream);
fwrite(
x'5A000AD3EEFB0000007100': // End Segment
1:11:fileOutStream);
fwrite(
x'5A0010D3A9FB000000FFFF40404040': // End Image Object
1:17:fileOutStream);
fwrite(
x'5A0010D3A95F000000FFFF40404040': // End Page Segment
1:17:fileOutStream);
/end-free
p e
--
This is the Java Programming on and around the IBM i (JAVA400-L) mailing list To post a message email: JAVA400-L@xxxxxxxxxxxx To subscribe, unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request@xxxxxxxxxxxx Before posting, please take a moment to review the archives at
http://archive.midrange.com/java400-l.
As an Amazon Associate we earn from qualifying purchases.