Skip to main content
Skip table of contents

(v13) How to apply a calibration in Harlequin Core


This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP.

Page content:

Calibration dictionaries may be used directly in the HMR or HHR RIPs, although in the HMR RIP it would be more usual to use them via the GUI. This section describes how to use calibration dictionaries directly in an HHR TestConfig as well as describing some other PostScript language operators that it is recommended to use in conjunction with calibration or that may be useful to know about when creating a TestConfig containing calibration.

The PostScript setcalibration operator

The setcalibration operator is in internaldict so the actual PostScript code to use is:

<< calibration dict >> 1183615869 internaldict /setcalibration get exec

OverprintPreview and calibration

In order to apply calibration correctly in transparent regions you must set the /OverprintPreview flag to a value other than the default.

The setting that is generally recommended is as follows:

TEXT
            << /OverprintPreview /SpotsOnly
            >> setinterceptcolorspace
            <<>> setpagedevice

If, however, you are already using /OverprintPreview true in your TestConfig as in the following example this will also apply calibration correctly and may be retained:

TEXT
            << /OverprintPreview true
            >> setinterceptcolorspace
            <<>> setpagedevice

For more information, see OverprintPreview and calibration.

If you want to apply a bump-up curve you must apply it using the /BumpUpCurve array in the /ActualPress calibration.

The setpagedevice operator and calibration

In order to allow PostScript language jobs to process correctly, there must be a setpagedevice call after the setcalibration call and the setinterceptcolorspace call which sets up /OverprintPreview. This can either contain other information needed for the TestConfig or it can, more simply, be:

<< >> setpagedevice

This call is not needed for other Page Description Languages, but it does no harm to them to include it in the TestConfig.

DefaultScreenName and calibration

The RIP has a default screen that it will use for transparent objects if the /TopMost user parameter is not set. By default, this is (Euclidean). Unless it is overridden by /OverrideSpotFunctionName this screen will also be used for any objects which are placed on the page before the job sets up a specific halftone, and for the /EraseColor (although such objects do not normally show).

The default screen name can be changed in the TestConfig. If, for example you wish to change the default screen to /Line, add the following:

<< /DefaultScreenName /Line >> setpagedevice

As the /DefaultScreenName is used for the /EraseColor at least, (unless overridden by /OverrideSpotFunctionName), it is important to ensure the calibration groups for any of the four device types which are in use, contain a calibration set sub-dictionary which is valid for this screen. This can either be done by including a sub-dictionary with a /WarningsCriteria dictionary containing an entry for /HalftoneName with a value of the screen concerned, such as, /Line in the above example, or it can also be achieved by including a calibration sub-dictionary with no /HalftoneName entry, in its /WarningsCriteria dictionary, as this is valid for any halftone.

OverrideSpotFunctionName and calibration

Sometimes it is useful to be able to override spot functions named in the job with a single spot function instead. This is set up using a systemparam as follows:

<< /OverrideSpotFunctionName /Line >> setsystemparams

or

<</OverrideSpotFunctionName (Line) >> setsystemparams

To remove the override use:

<< /OverrideSpotFunctionName null >> setsystemparams

Again, if you are using /OverrideSpotFunctionName you need to ensure that the calibration dictionary contains a calibration set sub-dictionary, which is valid for the override that you have selected.

NegativePrint and calibration

If the implementation using the HHR SDK supports /NegativePrint, that is, it will print a negative image of the job, then if this is wanted for a particular set up, this is signaled in the TestConfig as follows:

TEXT
            << /NegativePrint true >> setpagedevice
        setpagedevice

and setsystemparams calls are cumulative although they may be issued separately. It is usually more efficient to combine them into a single call.

Example configuration files

The following examples show how the CMYKSeparations300dpi file supplied in the SWclrip/TestConfig folder of the HHR SDK can be extended to support calibration. They illustrate the use of some of the keys above.

Example 1:

TEXT
            % CMYK separations, 300 dpi
            % Copyright (C) 2014 Global Graphics Software Ltd. All rights reserved.
            <<
              /PageBufferType /LE
              /Separations true
              /HWResolution [ 300 300 ]
              /DefaultScreenName /Line
              /NegativePrint true % request the SDK client to make a negative image of the job
            >> setpagedevice
            << /OverprintPreview /SpotsOnly >> setinterceptcolorspace
            <<
              % There is no Device calibration in this dictionary presumably because the
              % film device or CTP is linear, so there is just an ActualPress calibration
              % to compensate for dot gain.
              /CalibrationType 6
              /MissingCalibrationAbort false
              /ActualPress[
              <<
                % This calibration is the fallback for any conditions.
                % Remove this if it is preferable to abort the job if an unexpected
                % halftone comes along.
                % Compensate for dot gain at 50% by calibrating to 40%
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.99 0.9 0.99 1.0 1.0 1.0 ]
              >>
              <<
                % This is an important one as it ensures we can calibrate for
                % the DefaultScreenName. This is needed for the the white background
                % of the job even if no dots actually show for that and also for any
                % marks that are made before the job sets up a halftone screen.
                % It may however be omitted if using a fallback calibration valid for
                % any conditions.
                % Compensate for dot gain at 50% by calibrating to 40%
                /WarningsCriteria
                <<
                  /HalftoneName /Line
                >>
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.75 0.75 0.99 0.9 0.99 1.0 1.0 1.0 ]
              >>
              <<
                % Compensate for dot gain at 50% by calibrating to 40%
                % and for dot gain at 40% by calibrating to 30%
                /WarningsCriteria << /HalftoneName /Round >>
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 0.6 0.7 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
              >>
              ]
            >>
            1183615869 internaldict /setcalibration get exec
            % This additional setpagedevice call is needed for PS jobs.
            % It makes no difference for other PDLs.
            << >> setpagedevice


Example 2:

TEXT
            % CMYK separations, 300 dpi
            % Copyright (C) 2014 Global Graphics Software Ltd. All rights reserved.
            <<
              /PageBufferType /LE
              /Separations true
              /HWResolution [ 300 300 ]
              /DefaultScreenName /Line
            >> setpagedevice
            << /OverprintPreview /SpotsOnly >> setinterceptcolorspace
            <<
              /CalibrationType 6
              /MissingCalibrationAbort false
              /Device[
              <<
                % This calibration is the fallback for any conditions.
                % Remove this if it is preferable to abort the job if an unexpected
                % halftone comes along.
                % In this case it is linear.
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 1.0 1.0] >>
              >>
              <<
                % This is an important one as it ensures we can calibrate for
                % the DefaultScreenName. This is needed for the the white background
                % of the job even if no dots actually show for that and also for any
                % marks that are made before the job sets up a halftone screen.
                % It may however be omitted if using a fallback calibration valid for
                % any conditions.
                % For test purposes this has been setup to make Cyan print very
                % heavily, i.e. 20% Cyan prints as 90%, and Magenta very light
                % i.e. 80% Magenta prints as 30%.
                /WarningsCriteria
                <<
                  /HalftoneName /Line
                >>
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 1.0 1.0 ] >>
                /Cyan << /CalibrationType 2 /Curve [ 0.0 0.0 0.8 0.1 1.0 1.0 ] >>
                /Magenta << /CalibrationType 2 /Curve [ 0.0 0.0 0.2 0.7 1.0 1.0 ] >>
              >>
              <<
                % For test purposes this has been set up to make black print very
                % heavily, i.e. 30% black prints as 85%.
                /WarningsCriteria << /HalftoneName /Round >>
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.7 0.15 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
              >>
              ]
              /ActualPress[
              <<
                % This calibration will is the fallback for any conditions.
                % Remove this if it is preferable to abort the job if an unexpected
                % halftone comes along.
                % Compensate for dot gain at 50% by calibrating to 40%
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.99 0.9 0.99 1.0 1.0 1.0 ]
              >>
              <<
                % This is an important one as it ensures we can calibrate for
                % the DefaultScreenName. This is needed for the the white background
                % of the job even if no dots actually show for that and also for any
                % marks that are made before the job sets up a halftone screen.
                % It may however be omitted if using a fallback calibration valid for
                % any conditions.
                % Compensate for dot gain at 50% by calibrating to 40%
                /WarningsCriteria
                <<
                  /HalftoneName /Line
                >>
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.75 0.75 0.99 0.9 0.99 1.0 1.0 1.0 ]
              >>
              <<
                % Compensate for dot gain at 50% by calibrating to 40%
                % and for dot gain at 40% by calibrating to 30%
                /WarningsCriteria << /HalftoneName /Round >>
                /Default << /CalibrationType 2 /Curve [ 0.0 0.0 0.5 0.6 0.6 0.7 1.0 1.0 ] >>
                /BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
              >>
              ]
            >>
            1183615869 internaldict /setcalibration get exec
            % This additional setpagedevice call is needed for PS jobs.
            % It makes no difference for other PDLs.
            << >> setpagedevice


Example 3:

TEXT
            % CMYK separations, 300 dpi
            % Copyright (C) 2014 Global Graphics Software Ltd. All rights reserved.
            <<
              /PageBufferType /LE
              /Separations true
              /HWResolution [ 300 300 ]
              /DefaultScreenName /Round
            >> setpagedevice
            << /OverprintPreview /SpotsOnly >> setinterceptcolorspace
            <<
              /CalibrationType 6
              /MissingCalibrationAbort false
              /Device [
                <<
                  /ForceSolids true
                  /CalibrationName (round)
                  /WarningsCriteria
                  <<
                    /HalftoneName /Round
                  >>
                  /Cyan
                  <<
                    % For test purposes this makes Cyan very dark, i.e. 50% Cyan
                    % prints as 90%.
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 0.5 0.1 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Magenta
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Yellow
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Black
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Default
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /Curve [[] [0 0 1 1 ] ]
                  >>
                >>
                <<
                  /ForceSolids true
                  /CalibrationName (line)
                  /WarningsCriteria
                  <<
                    /HalftoneName /Line
                  >>
                  /Cyan
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Magenta
                  <<
                    % For test purposes this makes Magenta very light, i.e. 50%
                    % Magenta prints as 10%.
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 0.5 0.9 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Yellow
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Black
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /ForceSolids true
                    /Curve [[0.0 0.0 1.0 1.0 ] [0 0 1 1 ] ]
                  >>
                  /Default
                  <<
                    % Linear calibration
                    /CalibrationType 2
                    /Curve [[] [0 0 1 1 ] ]
                  >>
                >>
              ]
              /ActualPress
              <<
                % Note in this example the ActualPress calibration is not for a calibration
                % group at all, i.e. this calibration will be applied to any halftone.
                /CalibrationName (CommercialA)
                /ForceSolids true
                /Cyan
                <<
                  /CalibrationType 2
                  /ForceSolids true
                  /Curve [0.0 0.0 0.00717425 0.02 0.0162743 0.04 0.0233935 0.06 0.0343828 0.08
            0.0530851 0.1 0.061653 0.12 0.0667412 0.14 0.0843521 0.16 0.0958065 0.18 0.110828
            0.2 0.179115 0.3 0.262697 0.4 0.306025 0.45 0.365769 0.5 0.425477 0.55 0.473972 0.6
            0.590661 0.7 0.727825 0.8 0.745993 0.82 0.777854 0.84 0.809002 0.86 0.833127 0.88
            0.86213 0.9 0.894259 0.92 0.914075 0.94 0.94573 0.96 0.980797 0.98 1.0 1.0 ]
                >>
                /Magenta
                <<
                  /CalibrationType 2
                  /ForceSolids true
                  /Curve [0.0 0.0 0.0089556 0.02 0.0214646 0.04 0.0305122 0.06 0.0372412 0.08
            0.0560291 0.1 0.0656937 0.12 0.082176 0.14 0.0877552 0.16 0.0883895 0.18 0.0999761
            0.2 0.182636 0.3 0.25516 0.4 0.304374 0.45 0.360587 0.5 0.420284 0.55 0.469196 0.6
            0.574143 0.7 0.705515 0.8 0.735662 0.82 0.770782 0.84 0.797661 0.86 0.823408 0.88
            0.852011 0.9 0.888007 0.92 0.91206 0.94 0.943567 0.96 0.983217 0.98 1.0 1.0 ]
                >>
                /Yellow
                <<
                  /CalibrationType 2
                  /ForceSolids true
                  /Curve [0.0 0.0 0.00493813 0.02 0.0114393 0.04 0.0169165 0.06 0.0241274 0.08
            0.0333467 0.1 0.0415312 0.12 0.0519952 0.14 0.0632076 0.16 0.0731615 0.18 0.0858877
            0.2 0.158414 0.3 0.250259 0.4 0.29175 0.45 0.332014 0.5 0.3797 0.55 0.44511 0.6
            0.541285 0.7 0.65428 0.8 0.690053 0.82 0.723688 0.84 0.746899 0.86 0.787037 0.88
            0.80781 0.9 0.861885 0.92 0.886681 0.94 0.935801 0.96 0.987354 0.98 1.0 1.0 ]
                >>
                /Black
                <<
                  /CalibrationType 2
                  /ForceSolids true
                  /Curve [0.0 0.0 0.00385118 0.02 0.00676 0.04 0.0133985 0.06 0.0165476 0.08
            0.0272707 0.1 0.0382585 0.12 0.0536124 0.14 0.0596916 0.16 0.0742491 0.18 0.0839247
            0.2 0.150373 0.3 0.227298 0.4 0.265406 0.45 0.325731 0.5 0.371644 0.55 0.436093 0.6
            0.527291 0.7 0.662939 0.8 0.69848 0.82 0.727203 0.84 0.760665 0.86 0.795623 0.88
            0.824322 0.9 0.866203 0.92 0.893163 0.94 0.934047 0.96 0.981364 0.98 1.0 1.0 ]
                >>
                /Default
                <<
                  /CalibrationType 2
                  /ForceSolids true
                  /Curve [0.0 0.0 1.0 1.0 ]
                >>
                /BumpUpCurve [0.0 0.0 0.7 0.7 0.996 0.9 0.996 1.0 1.0 1.0 ]
              >>


TEXT
</p>
<p>            >>
            1183615869 internaldict /setcalibration get exec
            % This additional setpagedevice call is needed for PS jobs.
            % It makes no difference for other PDLs.
            << >> setpagedevice


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.