aboutsummaryrefslogtreecommitdiff
path: root/postscript/prologues/cropmarks.ps
diff options
context:
space:
mode:
Diffstat (limited to 'postscript/prologues/cropmarks.ps')
-rw-r--r--postscript/prologues/cropmarks.ps131
1 files changed, 131 insertions, 0 deletions
diff --git a/postscript/prologues/cropmarks.ps b/postscript/prologues/cropmarks.ps
new file mode 100644
index 00000000..256891a9
--- /dev/null
+++ b/postscript/prologues/cropmarks.ps
@@ -0,0 +1,131 @@
+%
+% Center pages, based on pageheight and pagewidth, and redefine showpage
+% to put cropmarks at each corner. Device dependent code to expand the
+% paper size goes in procedure expandpagesize. Currently only supports
+% a Linotronic 200P typesetter using 12 inch wide paper. You'll have to
+% add code to expandpagesize to support different typesetters or even a
+% 200P that's running differently.
+%
+
+/CropmarkDict 40 dict dup begin
+
+/expandpage true def
+/magnification 1 def
+/pageheight 11.0 def
+/pagewidth 8.5 def
+/scaletofit false def
+/scaling 1 def
+
+/marklength .3 def % inches
+/markstart .125 def % inches
+/markend .04 def % inches
+/marklinewidth .25 def % points
+
+/inch {72 mul} def
+/min {2 copy gt {exch} if pop} def
+/max {2 copy lt {exch} if pop} def
+
+/setup {
+ /markspace markstart marklength add markend add inch marklinewidth add def
+ /totalheight pageheight inch markspace 2 mul add def
+ /totalwidth pagewidth inch markspace 2 mul add def
+
+ pagedimensions
+ checkpagesize
+ /scaling getscaling def
+ xcenter ycenter translate
+ scaling scaling scale
+ pagewidth inch 2 div neg pageheight inch 2 div neg translate
+ clippage
+} def
+
+/pagedimensions {
+ clippath pathbbox newpath
+ 4 -1 roll exch 4 1 roll 4 copy
+ sub /width exch def
+ sub /height exch def
+ add 2 div /xcenter exch def
+ add 2 div /ycenter exch def
+} def
+
+/checkpagesize {
+ height totalheight lt width totalwidth lt or expandpage and {
+ expandpagesize
+ pagedimensions
+ } if
+} def
+
+/expandpagesize { % device dependent code
+ /Product statusdict begin /product where {pop product}{()} ifelse end def
+
+ Product (Linotype) eq { % Linotronic 200P and other models?
+ statusdict /setpageparams known {
+ /maxwidth 12.0 inch def % 12 inch wide paper?
+ totalheight maxwidth le {
+ totalheight
+ totalwidth
+ maxwidth totalheight sub 2 div
+ 0
+ }{
+ totalwidth maxwidth min
+ totalheight
+ maxwidth totalwidth maxwidth min sub 2 div
+ 1
+ } ifelse
+ statusdict /setpageparams get exec
+ } if
+ } if
+} def
+
+/getscaling {
+ scaletofit
+ {height totalheight div width totalwidth div min 1 min}
+ {1}
+ ifelse
+} def
+
+/clippage {
+ newpath
+ 0 0 moveto
+ pagewidth inch 0 rlineto
+ 0 pageheight inch rlineto
+ pagewidth neg inch 0 rlineto
+ closepath clip
+ newpath
+} def
+
+/cropmark {
+ gsave
+ translate
+ rotate
+ marklinewidth dup translate
+ 0 0 transform round exch round exch itransform translate
+ markstart inch 0 moveto marklength inch 0 rlineto stroke
+ 0 markstart inch moveto 0 marklength inch rlineto stroke
+ grestore
+} bind def
+
+/@PreviousShowpage /showpage load def
+
+end def
+
+%
+% Cropmarks - in the default coordinate system.
+%
+
+/showpage {
+ gsave
+ CropmarkDict begin
+ initgraphics
+ marklinewidth setlinewidth
+ xcenter ycenter translate
+ scaling scaling scale
+ 0 pagewidth inch 2 div pageheight inch 2 div cropmark
+ 90 pagewidth inch neg 2 div pageheight inch 2 div cropmark
+ 180 pagewidth inch neg 2 div pageheight inch 2 div neg cropmark
+ 270 pagewidth inch 2 div pageheight inch 2 div neg cropmark
+ @PreviousShowpage
+ end
+ grestore
+} bind def
+