[comp.lang.postscript] How do I ask ... the size of the physical page

toms@fcs260c2.ncifcrf.gov (Tom Schneider) (06/19/91)

In article <JNP.91Jun3141419@tnds09.tele.nokia.fi> jnp@tnds09.tele.nokia.fi
(J|rgen N|rgaard) writes:
>
> How do I ask ... the size of the physical page on which I'm printing. 

---snip ---snip ---snip ---snip ---snip ---snip ---snip ---snip ---snip
%! this is a PostScript program
% version = 1.01 of printerarea.ps 1991 February 12
% This program determines the printable area of a printer
% and prints the coordinates out in readable form.
% In addition, it draws a rectangle around the area,
% then it makes a series of shrinking rectangles to help
% visualize where the boundary is.  Finally, the corners
% of all these rectangles are connected to a single
% point on the image, to make it clear what is going on.
%   Tom Schneider
%   National Cancer Institute
%   Laboratory of Mathematical Biology
%   Frederick, Maryland  21702-1201
%   toms@ncifcrf.gov
erasepage
/Times-Roman findfont 30 scalefont setfont
/down {0 -50 rmoveto} def
/print {gsave show 10 string cvs show grestore down} def

% obtain the imagable area of the printer using initclip
gsave initclip clippath pathbbox grestore
%pstack % use this if you want to see the stack
        % while running the program

% capture the corners of the imagable area
% (see pathbbox in the red book)
/ury exch def
/urx exch def
/lly exch def
/llx exch def

% use the following if you want to see the values
% llx lly urx ury
% pstack  % this stack should match the first one
% clear

150 450 moveto
(printer imageable area:) gsave show grestore down

% print the values
llx ( lower left x [llx]: ) print
lly ( lower left y [lly]: ) print
urx (upper right x [urx]: ) print
ury (upper right y [ury]: ) print
urx llx sub (Delta x:) print
ury lly sub (Delta y:) print

urx llx sub ury lly sub div (Delta y / Delta x:) print

/tospot { % draw a line to a special spot
% to help keep track of what's happening
gsave currentpoint moveto 200 500 lineto stroke grestore
} def

/roundstroke{
% draw a box around the area
llx lly moveto
tospot
urx lly lineto
tospot
urx ury lineto
tospot
llx ury lineto
tospot
llx lly lineto
tospot
stroke
} def

/shift 20 def % amount to decrease the area each time

/shiftinward {
% reduction of the area by the amount shift
/ury ury shift sub def
/urx urx shift sub def
/lly lly shift add def
/llx llx shift add def
} def

% draw a series of decreasing boxes to help figure
% things out
roundstroke
shiftinward

roundstroke
shiftinward

roundstroke
shiftinward

roundstroke
shiftinward

roundstroke

showpage
---snip ---snip ---snip ---snip ---snip ---snip ---snip ---snip ---snip

Use the output of the previous program to define the 4 variables of the next
program.  This way you can display the clip area of your printers on your
screen.  The black edge is just OUTSIDE the printable area.  I run OpenWindows
and this allows me to see if the figures will fit on the printer's page.  It
saves lots of paper.

---snip ---snip ---snip ---snip ---snip ---snip ---snip ---snip ---snip

% set the clip area to the Apple Laserwriter Ntx printer's
% version = 2.01 of ntx.ps 1991 May 7
/llx 14.16 def
/lly 7.92 def
/urx 597.6 def
/ury 784.32 def

/newarea{
% draw a box around the area
llx lly moveto
urx lly lineto
urx ury lineto
llx ury lineto
llx lly lineto
clip
} def

/printedge 1 def

/bigger{
/llx llx printedge sub def
/lly lly printedge sub def
/urx urx printedge add def
/ury ury printedge add def
} def

/smaller{
/llx llx printedge add def
/lly lly printedge add def
/urx urx printedge sub def
/ury ury printedge sub def
} def

gsave
  bigger
  newarea
  0 setgray
  fill

  smaller
grestore
  newarea
gsave
  1 setgray
  fill
grestore