]>
Commit | Line | Data |
---|---|---|
4744bd90 | 1 | <HTML> |
2 | <!-- SECTION: Specifications --> | |
3 | <HEAD> | |
4 | <TITLE>CUPS Raster Format</TITLE> | |
5 | </HEAD> | |
6 | <BODY> | |
7 | ||
8 | <P>CUPS raster files are device-dependent raster image files that | |
9 | contain a PostScript page device dictionary and device-dependent | |
10 | raster imagery for each page in the document. These files are | |
11 | used to transfer raster data from the PostScript and image file | |
12 | RIPs to device-dependent filters that convert the raster data to | |
13 | a printable format.</P> | |
14 | ||
15 | <P>CUPS 1.0 and 1.1 used a version 1 raster format. CUPS 1.2 | |
16 | introduces a version 2 format that is a superset of the version 1 | |
17 | format. Applications using the CUPS Imaging API (the cupsRaster* | |
18 | functions) can read both formats without code changes.</P> | |
19 | ||
20 | <P>The registered MIME media type for CUPS raster files is | |
21 | <CODE>application/vnd.cups-raster</CODE>.</P> | |
22 | ||
23 | ||
24 | <H2 CLASS="title"><A NAME="V1">Version 1 Raster File Format</A></H2> | |
25 | ||
26 | <P>A version 1 raster file begins with a 32-bit synchronization | |
27 | word: 0x52615374 ("RaSt") for big-endian architectures and | |
28 | 0x74536152 ("tSaR") for little-endian architectures. The writer | |
29 | of the raster file will use the native word order, and the reader | |
30 | is responsible for detecting a reversed word order file and | |
31 | swapping bytes as needed. The CUPS Imaging API raster functions | |
32 | perform this function automatically.</P> | |
33 | ||
34 | <P>Following the synchronization word are a series of raster | |
35 | pages. Each page starts with a page device dictionary header and | |
36 | is followed immediately by the (uncompressed, raw) raster data | |
37 | for that page.</P> | |
38 | ||
39 | <DIV CLASS="table"><TABLE SUMMARY="CUPS Version 1 Raster Page Device Dictionary"> | |
40 | <CAPTION>Table 1: CUPS Version 1 Raster Page Device Dictionary</CAPTION> | |
41 | <TR> | |
42 | <TH>Bytes</TH> | |
43 | <TH>Type</TH> | |
44 | <TH>Description</TH> | |
45 | <TH>Values</TH> | |
46 | </TR> | |
47 | <TR> | |
48 | <TD>0-63</TD> | |
49 | <TD>C String</TD> | |
50 | <TD>MediaClass</TD> | |
51 | <TD>Media class string</TD> | |
52 | </TR> | |
53 | <TR> | |
54 | <TD>64-127</TD> | |
55 | <TD>C String</TD> | |
56 | <TD>MediaColor</TD> | |
57 | <TD>Media color string</TD> | |
58 | </TR> | |
59 | <TR> | |
60 | <TD>128-191</TD> | |
61 | <TD>C String</TD> | |
62 | <TD>MediaType</TD> | |
63 | <TD>Media type string</TD> | |
64 | </TR> | |
65 | <TR> | |
66 | <TD>192-255</TD> | |
67 | <TD>C String</TD> | |
68 | <TD>OutputType</TD> | |
69 | <TD>Output type string</TD> | |
70 | </TR> | |
71 | <TR> | |
72 | <TD>256-259</TD> | |
73 | <TD>Unsigned Integer</TD> | |
74 | <TD>AdvanceDistance</TD> | |
75 | <TD>0 to 2<SUP>32</SUP> - 1 points</TD> | |
76 | </TR> | |
77 | <TR> | |
78 | <TD>260-263</TD> | |
79 | <TD>Unsigned Integer</TD> | |
80 | <TD>AdvanceMedia</TD> | |
81 | <TD>0 = Never advance roll<BR> | |
82 | 1 = Advance roll after file<BR> | |
83 | 2 = Advance roll after job<BR> | |
84 | 3 = Advance roll after set<BR> | |
85 | 4 = Advance roll after page</TD> | |
86 | </TR> | |
87 | <TR> | |
88 | <TD>264-267</TD> | |
89 | <TD>Unsigned Integer</TD> | |
90 | <TD>Collate</TD> | |
91 | <TD>0 = do not collate copies<BR> | |
92 | 1 = collate copies</TD> | |
93 | </TR> | |
94 | <TR> | |
95 | <TD>268-271</TD> | |
96 | <TD>Unsigned Integer</TD> | |
97 | <TD>CutMedia</TD> | |
98 | <TD>0 = Never cut media<BR> | |
99 | 1 = Cut roll after file<BR> | |
100 | 2 = Cut roll after job<BR> | |
101 | 3 = Cut roll after set<BR> | |
102 | 4 = Cut roll after page</TD> | |
103 | </TR> | |
104 | <TR> | |
105 | <TD>272-275</TD> | |
106 | <TD>Unsigned Integer</TD> | |
107 | <TD>Duplex</TD> | |
108 | <TD>0 = Print single-sided<BR> | |
109 | 1 = Print double-sided</TD> | |
110 | </TR> | |
111 | <TR> | |
112 | <TD>276-283</TD> | |
113 | <TD>Unsigned Integers (2)</TD> | |
114 | <TD>HWResolution</TD> | |
115 | <TD>Horizontal and vertical resolution in dots-per-inch.</TD> | |
116 | </TR> | |
117 | <TR> | |
118 | <TD>284-299</TD> | |
119 | <TD>Unsigned Integers (4)</TD> | |
120 | <TD>ImagingBoundingBox</TD> | |
121 | <TD>Four integers giving the left, bottom, right, and top positions | |
122 | of the page bounding box in points</TD> | |
123 | </TR> | |
124 | <TR> | |
125 | <TD>300-303</TD> | |
126 | <TD>Unsigned Integer</TD> | |
127 | <TD>InsertSheet</TD> | |
128 | <TD>0 = Do not insert separator sheets<BR> | |
129 | 1 = Insert separator sheets</TD> | |
130 | </TR> | |
131 | <TR> | |
132 | <TD>304-307</TD> | |
133 | <TD>Unsigned Integer</TD> | |
134 | <TD>Jog</TD> | |
135 | <TD>0 = Do no jog pages<BR> | |
136 | 1 = Jog pages after file<BR> | |
137 | 2 = Jog pages after job<BR> | |
138 | 3 = Jog pages after set</TD> | |
139 | </TR> | |
140 | <TR> | |
141 | <TD>308-311</TD> | |
142 | <TD>Unsigned Integer</TD> | |
143 | <TD>LeadingEdge</TD> | |
144 | <TD>0 = Top edge is first<BR> | |
145 | 1 = Right edge is first<BR> | |
146 | 2 = Bottom edge is first<BR> | |
147 | 3 = Left edge is first</TD> | |
148 | </TR> | |
149 | <TR> | |
150 | <TD>312-319</TD> | |
151 | <TD>Unsigned Integers (2)</TD> | |
152 | <TD>Margins</TD> | |
153 | <TD>Left and bottom origin of image in points</TD> | |
154 | </TR> | |
155 | <TR> | |
156 | <TD>320-323</TD> | |
157 | <TD>Unsigned Integer</TD> | |
158 | <TD>ManualFeed</TD> | |
159 | <TD>0 = Do not manually feed media<BR> | |
160 | 1 = Manually feed media</TD> | |
161 | </TR> | |
162 | <TR> | |
163 | <TD>324-327</TD> | |
164 | <TD>Unsigned Integer</TD> | |
165 | <TD>MediaPosition</TD> | |
166 | <TD>Input slot position from 0 to N</TD> | |
167 | </TR> | |
168 | <TR> | |
169 | <TD>328-331</TD> | |
170 | <TD>Unsigned Integer</TD> | |
171 | <TD>MediaWeight</TD> | |
172 | <TD>Media weight in grams per meter squared</TD> | |
173 | </TR> | |
174 | <TR> | |
175 | <TD>332-335</TD> | |
176 | <TD>Unsigned Integer</TD> | |
177 | <TD>MirrorPrint</TD> | |
178 | <TD>0 = Do not mirror prints<BR> | |
179 | 1 = Mirror prints</TD> | |
180 | </TR> | |
181 | <TR> | |
182 | <TD>336-339</TD> | |
183 | <TD>Unsigned Integer</TD> | |
184 | <TD>NegativePrint</TD> | |
185 | <TD>0 = Do not invert prints<BR> | |
186 | 1 = Invert prints</TD> | |
187 | </TR> | |
188 | <TR> | |
189 | <TD>340-343</TD> | |
190 | <TD>Unsigned Integer</TD> | |
191 | <TD>NumCopies</TD> | |
192 | <TD>1 to 2<SUP>32</SUP> - 1</TD> | |
193 | </TR> | |
194 | <TR> | |
195 | <TD>344-347</TD> | |
196 | <TD>Unsigned Integer</TD> | |
197 | <TD>Orientation</TD> | |
198 | <TD>0 = Do not rotate page<BR> | |
199 | 1 = Rotate page counter-clockwise<BR> | |
200 | 2 = Turn page upside down<BR> | |
201 | 3 = Rotate page clockwise</TD> | |
202 | </TR> | |
203 | <TR> | |
204 | <TD>348-351</TD> | |
205 | <TD>Unsigned Integer</TD> | |
206 | <TD>OutputFaceUp</TD> | |
207 | <TD>0 = Output face down<BR> | |
208 | 1 = Output face up</TD> | |
209 | </TR> | |
210 | <TR> | |
211 | <TD>352-359</TD> | |
212 | <TD>Unsigned Integers (2)</TD> | |
213 | <TD>PageSize</TD> | |
214 | <TD>Width and length in points</TD> | |
215 | </TR> | |
216 | <TR> | |
217 | <TD>360-363</TD> | |
218 | <TD>Unsigned Integer</TD> | |
219 | <TD>Separations</TD> | |
220 | <TD>0 = Print composite image<BR> | |
221 | 1 = Print color separations</TD> | |
222 | </TR> | |
223 | <TR> | |
224 | <TD>364-367</TD> | |
225 | <TD>Unsigned Integer</TD> | |
226 | <TD>TraySwitch</TD> | |
227 | <TD>0 = Do not change trays if selected tray is empty<BR> | |
228 | 1 = Change trays if selected tray is empty</TD> | |
229 | </TR> | |
230 | <TR> | |
231 | <TD>368-371</TD> | |
232 | <TD>Unsigned Integer</TD> | |
233 | <TD>Tumble</TD> | |
234 | <TD>0 = Do not rotate even pages when duplexing<BR> | |
235 | 1 = Rotate even pages when duplexing</TD> | |
236 | </TR> | |
237 | <TR> | |
238 | <TD>372-375</TD> | |
239 | <TD>Unsigned Integer</TD> | |
240 | <TD>cupsWidth</TD> | |
241 | <TD>Width of page image in pixels</TD> | |
242 | </TR> | |
243 | <TR> | |
244 | <TD>376-379</TD> | |
245 | <TD>Unsigned Integer</TD> | |
246 | <TD>cupsHeight</TD> | |
247 | <TD>Height of page image in pixels</TD> | |
248 | </TR> | |
249 | <TR> | |
250 | <TD>380-383</TD> | |
251 | <TD>Unsigned Integer</TD> | |
252 | <TD>cupsMediaType</TD> | |
253 | <TD>Driver-specific 0 to 2<SUP>32</SUP> - 1</TD> | |
254 | </TR> | |
255 | <TR> | |
256 | <TD>384-387</TD> | |
257 | <TD>Unsigned Integer</TD> | |
258 | <TD>cupsBitsPerColor</TD> | |
259 | <TD>1, 2, 4, 8 bits for version 1 raster files<BR> | |
260 | 1, 2, 4, 8, and 16 bits for version 2 raster files</TD> | |
261 | </TR> | |
262 | <TR> | |
263 | <TD>388-391</TD> | |
264 | <TD>Unsigned Integer</TD> | |
265 | <TD>cupsBitsPerPixel</TD> | |
266 | <TD>1 to 32 bits for version 1 raster files<BR> | |
267 | 1 to 64 bits for version 2 raster files</TD> | |
268 | </TR> | |
269 | <TR> | |
270 | <TD>392-395</TD> | |
271 | <TD>Unsigned Integer</TD> | |
272 | <TD>cupsBytesPerLine</TD> | |
273 | <TD>1 to 2<SUP>32</SUP> - 1 bytes</TD> | |
274 | </TR> | |
275 | <TR> | |
276 | <TD>396-399</TD> | |
277 | <TD>Unsigned Integer</TD> | |
278 | <TD>cupsColorOrder</TD> | |
279 | <TD>0 = chunky pixels (CMYK CMYK CMYK)<BR> | |
280 | 1 = banded pixels (CCC MMM YYY KKK)<BR> | |
281 | 2 = planar pixels (CCC... MMM... YYY... KKK...)</TD> | |
282 | </TR> | |
283 | <TR> | |
284 | <TD>400-403</TD> | |
285 | <TD>Unsigned Integer</TD> | |
286 | <TD>cupsColorSpace</TD> | |
287 | <TD>0 = white<BR> | |
288 | 1 = RGB<BR> | |
289 | 2 = RGBA<BR> | |
290 | 3 = black<BR> | |
291 | 4 = CMY<BR> | |
292 | 5 = YMC<BR> | |
293 | 6 = CMYK<BR> | |
294 | 7 = YMCK<BR> | |
295 | 8 = KCMY<BR> | |
296 | 9 = KCMYcm<BR> | |
297 | 10 = GMCK<BR> | |
298 | 11 = GMCS<BR> | |
299 | 12 = WHITE<BR> | |
300 | 13 = GOLD<BR> | |
301 | 14 = SILVER<BR> | |
302 | 15 = CIE XYZ<BR> | |
303 | 16 = CIE Lab<BR> | |
304 | 17 = RGBW<BR> | |
305 | 32 = ICC1<BR> | |
306 | 33 = ICC2<BR> | |
307 | 34 = ICC3<BR> | |
308 | 35 = ICC4<BR> | |
309 | 36 = ICC5<BR> | |
310 | 37 = ICC6<BR> | |
311 | 38 = ICC7<BR> | |
312 | 39 = ICC8<BR> | |
313 | 40 = ICC9<BR> | |
314 | 41 = ICCA (10)<BR> | |
315 | 42 = ICCB (11)<BR> | |
316 | 43 = ICCC (12)<BR> | |
317 | 44 = ICCD (13)<BR> | |
318 | 45 = ICCE (14)<BR> | |
319 | 46 = ICCF (15)<BR> | |
320 | </TD> | |
321 | </TR> | |
322 | <TR> | |
323 | <TD>404-407</TD> | |
324 | <TD>Unsigned Integer</TD> | |
325 | <TD>cupsCompression</TD> | |
326 | <TD>Driver-specific 0 to 2<SUP>32</SUP> - 1</TD> | |
327 | </TR> | |
328 | <TR> | |
329 | <TD>408-411</TD> | |
330 | <TD>Unsigned Integer</TD> | |
331 | <TD>cupsRowCount</TD> | |
332 | <TD>Driver-specific 0 to 2<SUP>32</SUP> - 1</TD> | |
333 | </TR> | |
334 | <TR> | |
335 | <TD>412-415</TD> | |
336 | <TD>Unsigned Integer</TD> | |
337 | <TD>cupsRowFeed</TD> | |
338 | <TD>Driver-specific 0 to 2<SUP>32</SUP> - 1</TD> | |
339 | </TR> | |
340 | <TR> | |
341 | <TD>416-419</TD> | |
342 | <TD>Unsigned Integer</TD> | |
343 | <TD>cupsRowStep</TD> | |
344 | <TD>Driver-specific 0 to 2<SUP>32</SUP> - 1</TD> | |
345 | </TR> | |
346 | </TABLE></DIV> | |
347 | ||
348 | ||
349 | <H2 CLASS="title"><A NAME="V2">Version 2 Raster File Format</A></H2> | |
350 | ||
351 | <P>A version 2 raster file begins with a 32-bit synchronization | |
352 | word: 0x52615332 ("RaS2") for big-endian architectures and | |
353 | 0x32536152 ("2SaR") for little-endian architectures. The writer | |
354 | of the raster file will use the native word order, and the reader | |
355 | is responsible for detecting a reversed word order file and | |
356 | swapping bytes as needed. The CUPS Imaging API raster functions | |
357 | perform this function automatically.</P> | |
358 | ||
359 | <P>Following the synchronization word are a series of raster | |
360 | pages. Each page starts with a version 2 page device dictionary | |
361 | header and is followed immediately by the compressed raster data | |
362 | for that page.</P> | |
363 | ||
364 | <DIV CLASS="table"><TABLE SUMMARY="CUPS Version 2 Raster Page Device Dictionary"> | |
365 | <CAPTION>Table 2: CUPS Version 2 Raster Page Device Dictionary</CAPTION> | |
366 | <TR> | |
367 | <TH>Bytes</TH> | |
368 | <TH>Type</TH> | |
369 | <TH>Description</TH> | |
370 | <TH>Values</TH> | |
371 | </TR> | |
372 | <TR> | |
373 | <TD>0-419</TD> | |
374 | <TD>Version 1 header data</TD> | |
375 | <TD>See Table 1</TD> | |
376 | </TR> | |
377 | <TR> | |
378 | <TD>420-423</TD> | |
379 | <TD>Unsigned Integer</TD> | |
380 | <TD>cupsNumColors</TD> | |
381 | <TD>1 to 6 colors</TD> | |
382 | </TR> | |
383 | <TR> | |
384 | <TD>424-427</TD> | |
385 | <TD>IEEE Single Precision</TD> | |
386 | <TD>cupsBorderlessScalingFactor</TD> | |
387 | <TD>0.0 or 1.0 or greater</TD> | |
388 | </TR> | |
389 | <TR> | |
390 | <TD>428-435</TD> | |
391 | <TD>IEEE Single Precision (2)</TD> | |
392 | <TD>cupsPageSize</TD> | |
393 | <TD>Width and length in points</TD> | |
394 | </TR> | |
395 | <TR> | |
396 | <TD>436-451</TD> | |
397 | <TD>IEEE Single Precision (4)</TD> | |
398 | <TD>cupsImagingBBox</TD> | |
399 | <TD>Four floating point numbers giving the left, bottom, | |
400 | right, and top positions of the page bounding box in | |
401 | points</TD> | |
402 | </TR> | |
403 | <TR> | |
404 | <TD>452-515</TD> | |
405 | <TD>Unsigned Integers (16)</TD> | |
406 | <TD>cupsInteger</TD> | |
407 | <TD>16 driver-defined integer values</TD> | |
408 | </TR> | |
409 | <TR> | |
410 | <TD>516-579</TD> | |
411 | <TD>IEEE Single Precision (16)</TD> | |
412 | <TD>cupsReal</TD> | |
413 | <TD>16 driver-defined floating point values</TD> | |
414 | </TR> | |
415 | <TR> | |
416 | <TD>580-1603</TD> | |
417 | <TD>C Strings (16x64)</TD> | |
418 | <TD>cupsString</TD> | |
419 | <TD>16 driver-defined strings</TD> | |
420 | </TR> | |
421 | <TR> | |
422 | <TD>1604-1667</TD> | |
423 | <TD>C String</TD> | |
424 | <TD>cupsMarkerType</TD> | |
425 | <TD>Ink/toner type string</TD> | |
426 | </TR> | |
427 | <TR> | |
428 | <TD>1668-1731</TD> | |
429 | <TD>C String</TD> | |
430 | <TD>cupsRenderingIntent</TD> | |
431 | <TD>Color rendering intent string</TD> | |
432 | </TR> | |
433 | <TR> | |
434 | <TD>1732-1795</TD> | |
435 | <TD>C String</TD> | |
436 | <TD>cupsPageSizeName</TD> | |
437 | <TD>Page size name/keyword string from PPD</TD> | |
438 | </TR> | |
439 | </TABLE></DIV> | |
440 | ||
441 | <H3><A NAME="COMPRESSION">Compressed Raster Data Format</A></H3> | |
442 | ||
443 | <P>The version 2 raster data is compressed using a modified TIFF | |
444 | packbits algorithm. Lines are grouped into an integral number of | |
445 | color values based upon the <CODE>cupsColorOrder</CODE> | |
446 | setting:</P> | |
447 | ||
448 | <DIV CLASS="table"><TABLE SUMMARY="Color Value Sizes"> | |
449 | <TR> | |
450 | <TH>cupsColorOrder</TH> | |
451 | <TH>Bytes per color value</TH> | |
452 | </TR> | |
453 | <TR> | |
454 | <TD>0 (chunky)</TD> | |
455 | <TD>(<CODE>cupsBitsPerPixel</CODE> + 7) / 8</TD> | |
456 | </TR> | |
457 | <TR> | |
458 | <TD>1 (banded)</TD> | |
459 | <TD>(<CODE>cupsBitsPerColor</CODE> + 7) / 8</TD> | |
460 | </TR> | |
461 | <TR> | |
462 | <TD>2 (planar)</TD> | |
463 | <TD>(<CODE>cupsBitsPerColor</CODE> + 7) / 8</TD> | |
464 | </TR> | |
465 | </TABLE></DIV> | |
466 | ||
467 | <P>Each line of raster data begins with a repetition count from 1 | |
468 | to 256 that is encoded using a single byte of "count - 1".</P> | |
469 | ||
470 | <P>After the repetition count, whole color values for that line | |
471 | are run-length encoded using the TIFF packbits algorithm. 1 to | |
472 | 128 repeated colors are encoded using an initial byte of "count - | |
473 | 1" followed by the color value byte(s). 2 to 128 non-repeating | |
474 | colors are encoded using an initial byte of "257 - count" | |
475 | followed by the color value bytes.</P> | |
476 | ||
477 | ||
478 | ||
479 | <H2 CLASS="title"><A NAME="HISTORY">Change History</A></H2> | |
480 | ||
481 | <H3>Changes in CUPS 1.2</H3> | |
482 | ||
483 | <ul> | |
484 | ||
485 | <li>Bumped raster version to 2</li> | |
486 | ||
487 | <li>Added RGBW colorspace</li> | |
488 | ||
489 | <li>Added 16 bit per color support</li> | |
490 | ||
491 | <li>Added cupsNumColors, cupsBorderlessScalingFactor, | |
492 | cupsPageSize, cupsImagingBBox, cupsInteger, cupsReal, | |
493 | cupsString, cupsMarkerType, cupsRenderingIntent, and | |
494 | cupsPageSizeName attributes to the page device | |
495 | dictionary</li> | |
496 | ||
497 | <li>Added raster data compression</li> | |
498 | ||
499 | <li>Added data type column to device dictionary | |
500 | documentation.</li> | |
501 | ||
502 | </ul> | |
503 | ||
504 | <h3>Changes in CUPS 1.1.19</h3> | |
505 | ||
506 | <ul> | |
507 | ||
508 | <li>Added ICC and CIE colorspaces.</li> | |
509 | ||
510 | </ul> | |
511 | ||
512 | </BODY> | |
513 | </HTML> |