%!PS-ADOBE-3.0
%%BeginSetup
%
%%BeginFeature: *PageSize A4
<</PageSize [[% sheet.width %] [% sheet.height %]] /ImagingBBox null>> setpagedevice
%%EndFeature
%%EndSetup
/Helvetica findfont 10 scalefont setfont
% The page dimensions
/page_width [% sheet.width %] def
/page_height [% sheet.height %] def
% Page margin
/h_margin [% sheet.h_margin %] def
/v_margin [% sheet.v_margin %] def
% Number of labels
/columns [% sheet.columns %] def
/rows [% sheet.rows %] def
/labels_definitions [
[%- FOREACH eps = sheet.labels %]
<<
% Bounding box of the EPS file
/eps_bb_ll_x [% eps.eps_bb_ll_x %]
/eps_bb_ll_y [% eps.eps_bb_ll_y %]
/eps_bb_ur_x [% eps.eps_bb_ur_x %]
/eps_bb_ur_y [% eps.eps_bb_ur_y %]
/eps_filename ([% eps.path %])
/eps_count [% eps.count %]
/eps_code {[% eps.code %]}
>>
[%- END %]
] def
/label_index 0 def
% Padding inside each label
/h_padding [% sheet.h_padding %] def
/v_padding [% sheet.v_padding %] def
% Spacing between labels
/h_spacing [% sheet.h_spacing %] def
/v_spacing [% sheet.v_spacing %] def
/label_width [% sheet.label_width %] def
/label_height [% sheet.label_height %] def
/portrait [% sheet.portrait %] 1 eq { true } { false } ifelse def
/landscape portrait not def
/skip_number [% sheet.skip %] def
/total_number [% sheet.count_labels %] skip_number add def
/with_grid [% sheet.grid %] 1 eq { true } { false } ifelse def
/select_label {
label_index 1 labels_definitions length 1 sub {
labels_definitions exch get /label_definition exch def
/eps_current_count label_definition /eps_count get def
eps_current_count 0 le {
/label_index label_index 1 add def
}
{
label_definition /eps_count eps_current_count 1 sub put
% labels_definitions label_index label_definition put
exit
} ifelse
} for
label_definition
} def
/draw_content {
label_width 2 div label_height 2 div translate
select_label begin
/content_width eps_bb_ur_x eps_bb_ll_x sub def
/content_height eps_bb_ur_y eps_bb_ll_y sub def
/content_ratio {
/content_ratio_x label_width h_padding 2 mul sub portrait { content_width } { content_height } ifelse div def
/content_ratio_y label_height v_padding 2 mul sub portrait { content_height } { content_width } ifelse div def
content_ratio_x content_ratio_y lt { content_ratio_x } { content_ratio_y } ifelse
} def
content_ratio dup scale
landscape { 90 rotate } if
content_width 2 div neg content_height 2 div neg translate
save
/showpage {} def
/setpagedevice /pop load def
eps_code
restore
end
} def
/draw_grid {
gsave
0.8 setgray
.8 setlinewidth
newpath
0 0 moveto
label_width 0 rlineto
0 label_height rlineto
label_width neg 0 rlineto
closepath
stroke
grestore
} def
/set_label_clipping {
newpath
h_padding v_padding moveto
label_width h_padding 2 mul sub 0 rlineto
0 label_height v_padding 2 mul sub rlineto
label_width h_padding 2 mul sub neg 0 rlineto
closepath
clip
} def
/counter 1 def
/upper_limit total_number def
{
gsave
h_margin page_height v_margin sub label_height sub translate
0 1 rows 1 sub {
gsave
label_height v_spacing add mul neg 0 exch translate
0 1 columns 1 sub {
gsave
label_width h_spacing add mul 0 translate
counter skip_number gt {
with_grid { draw_grid } if
set_label_clipping
draw_content
} if
/counter counter 1 add def
/upper_limit upper_limit 1 sub def
grestore
upper_limit 0 le { exit } if
} for
grestore
upper_limit 0 le { exit } if
} for
grestore
showpage
upper_limit 0 le { exit } if
} loop