Dynamic imposition
Using dynamic imposition, various aspects of the PDF to be imposed can be determined and used to control the imposition process.
In the first part of this article, the task is to reverse the page order of the document. As the input document may have different page sizes, the size of each output page will be adjusted accordingly. Also, existing TrimBoxes will be restored in the resulting document.
You'll lalso find an example, how to move the first page to the end of the document, while maintaining the order of the other pages.
The last part is an example for a full dynamic Step and Repeat imposition scheme with many comments and explanations in the code.
The content of the SheetConfig isn't used in both cases, as the sizes of Sheet and Slot will be defined during runtime by the RunList. But as the Impose engine requires the presence of a SheetConfig (as it can not be determined at the beginning of the imposition processing if there will be sheets and slots created by the RunList), it make sense to use a simple version of this config file.
Introducing 2 variables to work with
During normal impositioning, the processing ends as soon as the value of "FirstPage" becomes bigger than the value of the "LastPage". But as the last page has to be positioned as the first page, working with these tokens could become difficult. Therefore 2 new counters/variables are introduced at the beginning and set to the value of the "LastPage" which will be positioned as the first page:
# Set current page:
Set
Counter1
var('LastPage')
Set
i
var('LastPage')
Defining Sheets for every page to be positioned
As the possibilities to analyse the input file during runtime are limited while impositioning, we will just create a new, unique sheet for every page. So we start the "Loop" already at this point:
Loop
These created sheets will always have the dimension of the CropBox of the current page. We already set the variable "i" to "LastPage", so we can use the values of this page to define the MediaBox of the Sheet (which is actually the visible dimension after processing):
Set SHEET_DEF_MEDIABOX_L cropboxleft(var('i'))
Set SHEET_DEF_MEDIABOX_B cropboxbottom(var('i'))
Set SHEET_DEF_MEDIABOX_W cropboxwidth(var('i'))
Set SHEET_DEF_MEDIABOX_H cropboxheight(var('i'))
As the pages may contain a TrimBox, we should take care that this Box as well as existing bleed are maintained. To achieve this, we first set the TrimBox of the Sheet to the values of the current page:
Set SHEET_DEF_TRIMBOX 1
Set
SHEET_DEF_TRIMBOX_L
trimboxleft(var('i'))
Set
SHEET_DEF_TRIMBOX_B
trimboxbottom(var('i'))
Set
SHEET_DEF_TRIMBOX_W
trimboxwidth(var('i'))
Set
SHEET_DEF_TRIMBOX_H
trimboxheight(var('i'))
and afterwards, we also set the Slot (so the place where the page shall be positioned) to the TrimBox of the current page:
Set SLOT_DEF_TRIMBOX_L trimboxleft(var('i'))
Set
SLOT_DEF_TRIMBOX_B trimboxbottom(var('i'))
Set
SLOT_DEF_TRIMBOX_W trimboxwidth(var('i'))
Set
SLOT_DEF_TRIMBOX_H trimboxheight(var('i'))
And to maintain existing bleed, we set the bleed for the Slot to the distance between CropBox and TrimBox for all 4 edges:
Set SLOT_DEF_BLEED_L trimboxleft(var('i')) - cropboxleft(var('i'))
Set
SLOT_DEF_BLEED_B trimboxbottom(var('i')) - cropboxbottom(var('i'))
Set
SLOT_DEF_BLEED_R cropboxright(var('i')) - trimboxright(var('i'))
Set
SLOT_DEF_BLEED_T cropboxtop(var('i')) - trimboxtop(var('i'))
Now we are almost done with the definition of the Sheet and the Slot for the page to be positioned. We just have to take care that the page will be placed unrotated, centered and that no additional marks are added to the positioned content:
Set SLOT_DEF_ROTATION 0
Set
SLOT_DEF_PLACEMENT
'CC'
Set
SLOT_DEF_BindingMargin
'N'
Set
SLOT_DEF_CropMarkStyleLB
'N'
Set
SLOT_DEF_CropMarkStyleLT
'N'
Set
SLOT_DEF_CropMarkStyleRT
'N'
Set
SLOT_DEF_CropMarkStyleRB
'N'
The impositioning process
We have not defined the correct Sheet for the last page.
We now have to:
- "write" this data as an available Sheet definition
- create a new Sheet based on this Sheet definition
- create a Slot on this page (named "1")
SetSheet var('i')
NewSheet
var('i')
MakeSlot
var('i') 1
We have already set the Variable "i" and the Token "Counter1" to the Value of "LastPage".
Now we are ready to place the page, which will be done with the page number stored in "Counter 1" (Variables can not be used to place a page):
PositionPage Counter1 Slot_1
Now the last page is positioned and we have to prepare the used Variables and Tokens for the next Loop. Therefore we set the values for "i" and "Counter1" to the secont last page (last page - 1):
Decrement Counter1
Set
i
var('i') - 1
To ensure that the processing is terminated after the first page as the last page in the new document, we also increase the Token for "FirstPage" by 1. As already mentioned: the processing will stop as soon as the (value of) "FirstPage" becomes greater than the (value of) "LastPage" (which remains to the real number of the last page during the whole imposition process).
Increment FirstPage
The RunList ends here and will automatically start again after "Loop
".
There, a new Sheet definition will be created which will then be used for the positioning of the second last page and so on...
Move first page to the end of the document
This sample is using a much more simple approach to place the first page at the end of the document.
Step and Repeat imposition scheme
This sample creates a new sheet for each page in the input file where the size of the sheet is determined from the TrimBox of the current page and the number of slots, the gaps between and the border around the slots.