Fitting a printout to the page
This lesson demonstrates how to fit a printout to a given page size.
The printThisCard command
The printThisCard handler takes two parameters, the paper size in points and the margin width in points. There are 72 points in an inch. The syntax of the command is
printThisCard pPaperSize, pMargin
The command is called with a statement such as:
printThisCard printThisCard empty, 144 ## 2-inch margin printThisCard "576,720", 72 ## 8x10" paper, 1" margin
Checking the parameters
You can call the handler with just one parameter, or with none. It's possible to do this because the first part of the handler checks to see whether a value was passed for both the parameters. If not, the handler assigns the value currently chosen for the user's printer. In other words, if you don't specify pPaperSize when you use the handler, it reads the size from the current paper size set by the system. If you don't specify pMargin, it assumes you want one-inch (72-point) margins.
if pPaperSize is empty then put the printPaperSize into pPaperSize end if if pMargin is empty then put 72 into pMargin end if
You can use this method with any handler to assign a default value to one or more of the parameters. Just check whether the parameter is empty. If it is, then no value has been passed, and you set the default value by simply putting the desired default into the parameter.
Calculating the print area
Next, the handler sets up a rectangle for the page size less the margins. Finally, the card is printed into this rectangle. When you use the print...into form of the print command, the card is scaled up or down to fit the destination rectangle. In this case, it is scaled to fit the printable area of the page, since that's the destination rectangle that we put into the tDestinationRect variable.
set the printMargins to pMargin,pMargin,pMargin,pMargin put pMargin,pMargin, \ item 1 of pPaperSize - pMargin, \ item 2 of pPaperSize - pMargin \ into tDestinationRect print this card into tDestinationRect
The printThisCard command code
on printThisCard pPaperSize, pMargin local tDestinationRect ## set up defaults if no size and margin provided if pPaperSize is empty then put the printPaperSize into pPaperSize end if if pMargin is empty then put 72 into pMargin end if ## get the page area set the printMargins to pMargin,pMargin,pMargin,pMargin put pMargin,pMargin, \ item 1 of pPaperSize - pMargin, \ item 2 of pPaperSize - pMargin \ into tDestinationRect ## print into that rectangle print this card into tDestinationRect end printThisCard
Magnifying or reducing the card size
Suppose you want to approach the problem from the opposite direction, and specify that cards should be printed at, say, half size regardless of how many cards fit on a page. In this case, instead of using the print...into form, set the printScale property to specify how much the card should be magnified or reduced:
set the printScale to 0.5 ## half print this card