HqnImpose2 PassThrough objective
This page applies to Harlequin v13.1r0 and later; both Harlequin Core and Harlequin MultiRIP.
This objective is intended for use where the entire layout of the flat is to be set in front end software. Thus such software could be written without worrying about writing all the PostScript-language code required to handle imposition. The imposition layout must be passed in a sub-dictionary called PassThroughData
included in the dictionary supplied to HqnInitImpose
. This dictionary can include:
| (Required, numbers) The final film dimensions in points. |
| (Optional, integer; was required before Harlequin 13.1) The number of pages on this surface. Defaults to the number of entries in |
| (Required, dictionary or array of subsidiary dictionaries). Each sub-dictionary defines the position of a single page on the imposed flat. If it's a dictionary, the keys for each of these values should be integers corresponding to the page number within the signature (starting at zero; for example, for a four-page signature you should define four entries with keys |
Each sub-dictionary within PageList
may include the following entries:
| A two-element array defining the width and height of this page. Its elements may be set separately as |
| A two element array defining the width and height of the panel inside which this page is drawn (see HqnImpose2 paneling). This is the same as |
| A two-element array defining the offset to the page origin from the bottom-left corner of the drawing area for the page. This is normally zero except for some EPS files. Its elements may be set separately as |
| A two-element array defining the offset to the bottom-left corner of the page area from the bottom left-corner of the panel. Its elements may be set separately as |
| A two-element array defining the |
| A real number defining the angle at which this page is rotated. It may be set instead by defining |
| A two-element array defining the position of the bottom-left corner of the panel for this page from the bottom-left corner of the film after taking |
| A six-element CTM array. If present and non-null, it overrides |
| A four-element array (or null) which specifies an orthogonal clip zone to which you should not apply rotation. In both places, it must be null (meaning no orthogonal clipping) or an array of four numbers |
| An integer with |
| An integer with |
Example use of /PassThrough
:
<<
/Objective /PassThrough
/PassThroughData <<
/FilmWidth 400
/FilmHeight 300
/PagesPerFilm 6
/PageList <<
0 <<
/ListPageSize [ 80 110 ]
/ListPanelSize [ 80 110 ]
/ListPageOffset [ 0 0 ]
/ListPanelOffset [ 0 0 ]
/ListScale [ 1 1 ]
/ListRotation 45
/ListPosition [ 90 10 ]
% No ListClip - no clipping
>>
1 <<
/ListPageSize [ 80 110 ]
/ListPanelSize [ 80 110 ]
/ListPageOffset [ 0 0 ]
/ListPanelOffset [ 0 0 ]
/ListScale [ 1 1 ]
/ListRotation 45
/ListPosition [ 210 10 ]
/ListClip null% no clipping
>>
2 <<
/ListPageSize [ 80 110 ]
/ListPanelSize [ 80 110 ]
/ListPageOffset [ 0 0 ]
/ListPanelOffset [ 0 0 ]
/ListScale [ 1 1 ]
/ListRotation 45
/ListPosition [ 330 10 ]
/ListClip [ 0 0 400 300 ]
% the whole sheet - no clipping
>>
3 <<
/ListPageSize [ 80 110 ]
/ListPanelSize [ 80 110 ]
/ListPageOffset [ 0 0 ]
/ListPanelOffset [ 0 0 ]
/ListScale [ 1 1 ]
/ListRotation 45
/ListPosition [ 90 160 ]
/ListClip [ 30 170 140 280 ]
% a little off all corners
>>
4 <<
/ListPageSize [ 80 110 ]
/ListPanelSize [ 80 110 ]
/ListPageOffset [ 0 0 ]
/ListPanelOffset [ 0 0 ]
/ListScale [ 1 1 ]
/ListRotation 45
/ListPosition [ 210 160 ]
/ListClip [ 170 170 240 280 ]
% more off left & right
>>
5 <<
/ListPageSize [ 80 110 ]
/ListPanelSize [ 80 110 ]
/ListPageOffset [ 0 0 ]
/ListPanelOffset [ 0 0 ]
/ListScale [ 1 1 ]
/ListRotation 45
/ListPosition [ 330 160 ]
/ListClip [ 30 170 140 280 ]
% the wrong place - no page visible.
>>
>>
>>
>> /HqnImpose2 /ProcSet findresource /HqnInitImpose get exec
This approach would often require considerable duplicated information (for example, when all the pages and panels are identical sizes). Most of the details of the entries in individual PageList
dictionaries above include notes on alternative methods of setting the values and defaults that take effect if they are not set. In these cases it is possible to omit the definition of a particular entry in the PageList
dictionary, but to define the variables in italics in PassThroughData
instead. (For example, if PanelWidth
and PanelHeight
are defined in PassThroughData
, the individual PageList
dictionaries do not need ListPanelSize
to be defined within them. If the required values match the defaults listed above, they need not be defined in either place.
ListPosition
must be defined for all pages.
A value defined within the PageList
dictionary takes precedence over a more globally defined value (for example, as shown with ListRotation
below).
Thus the above example could also be written as:
/mm { 72. mul 25.4 div } bind def
<<
/Objective /PassThrough
/PassThroughData <<
/FilmWidth 200 mm
/FilmHeight 300 mm
/PagesPerFilm 4
/PageWidth 80 /PageHeight 80
/PageList <<
0 <<
/ListPosition [ 10 10 ]
>>
1 <<
/ListPosition [ 110 10 ]
>>
2 <<
/ListRotation 180
/ListPosition [ 190 290 ]
>>
3 <<
/ListRotation 180
/ListPosition [ 90 290 ]
>>
>>
>>
>> /HqnImpose2 /ProcSet findresource /HqnInitImpose get exec
You must use the PassThrough
tactic if you select the PassThrough
objective.