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

0 Comments

Add your comment

E-Mail me when someone replies to this comment