User Tools

Site Tools


pdf:colors

This is an old revision of the document!


PDF distinguishes between filling (paint the interior of a closed path) and stroking (paint the outline of a path) when painting. Each mode has its own color and is used with the appropriate paint operators.

For example, a filled rectangle with border can be painted with one operator (/re) using both the filling and stroking color (which can be different).

In order to set a color, first the colorspace and then the actual color has to be set with the right parameters for that colorspace. For example setting the stroking color to red in RGB:

/DeviceRGB CS   % set colorspace for stroking
1 0 0 SC        % set stroking color

For the device colorspaces, there exist short cut operators doing both at once. For the above example one can write:

1 0 0 RG        % set RGB colorspace and color for stroking

There are 11 distinct colorspaces available in PDF:

### Device colorspaces Device dependent, Not reproducable.

* DeviceGray 1 components [0..1]; `0` is black, `1` is white.

* DeviceRGB additive (for screens); 3 components [0..1]; `0 0 0` is black, `1 1 1` is white.

* DeviceCMYK subtractive (for printing); 4 components [0..1]; `0 0 0 1` is black, `0 0 0 0` is white.

### CIE-based colorspaces Calibrated: device independent, reproducable.

* CalGray

* CalRGB

* Lab

* ICCBased

### Special colorspaces

* Indexed

* Pattern

* Separation

* DeviceN

Most commonly used and easiest are the device colorspaces. Setting black is done like this in the different colorspaces:

% DeviceGray
0 G        % stroking
0 g        % filling
% DeviceRGB
0 0 0 RG   % stroking
0 0 0 rg   % filling
% DeviceCMYK
0 0 0 1 K  % stroking
0 0 0 1 k  % filling

The PDF4Smalltalk library supports these variations by initializing the renderer with a colorspace. The renderer can than select the right operators when the fill or stroke color is set. The API is:

"colorspace: DeviceGray new"
renderer strokeColor: <ColorValue or CMYKColor>.   "with conversion"
renderer fillColor: <ColorValue or CMYKColor>.     "with conversion"
"colorspace: DeviceRGB new"
renderer strokeColor: <ColorValue>.   "no conversion"
renderer fillColor: <ColorValue>.     "no conversion"
"colorspace: DeviceCMYK new"
renderer strokeColor: <CMYKColor>.    "no conversion"
renderer fillColor: <CMYKColor>.      "no conversion"

Example:

page := Page newInBounds: (0 @ 0 corner: 100 @ 100) colorspace: DeviceRGB new render: [:renderer |
	renderer fillColor: ColorValue red.
	renderer addRectangleLeft: 20 bottom: 20 width: 20 height: 40.
	renderer fill.
	renderer strokeColor: ColorValue blue.
	renderer linewidth: 5.
	renderer addRectangleLeft: 20 bottom: 20 width: 20 height: 40.
	renderer stroke].
/var/www/virtual/code4hl/html/dokuwiki/data/attic/pdf/colors.1427546423.txt.gz · Last modified: 2015/03/28 13:40 by dokuadmin