Visual Basic Concepts

Printing with the Printer Object

See Also

There are several ways to place text and graphics on the Printer object. To print with the Printer object, do any of the following:

Printer Object Properties

The properties of the Printer object initially match those of the default printer set in the Windows Control Panel. At run time, you can set any of the Printer object properties, which include: PaperSize, Height, Width, Orientation, ColorMode, Duplex, TrackDefault, Zoom, DriverName, DeviceName, Port, Copies, PaperBin, and PrintQuality. For more details and syntax for these methods, see the Language Reference.

If the TrackDefault property is True and you change the default printer in the Windows Control Panel, the Printer object property values will reflect the properties of the new default printer.

You cannot change some properties in the middle of a page once a property has been set. Changes to these properties will only affect subsequent pages. The following statements show how you can print each page using a different print quality:

For pageno = 1 To 4
   Printer.PrintQuality = -1 * pageno
   Printer.Print "The quality of this page is"; pageno
   Printer.NewPage
Next

Print quality values can range from – 4 to – 1, or a positive integer corresponding to the print resolution in dots per inch (DPI). For example, the following code would set the printer’s resolution to 300 DPI:

Printer.PrintQuality = 300

For More Information   For information on the Printer object properties, see the appropriate property in the Language Reference.

Note   The effect of Printer property values depends on the driver supplied by the printer manufacturer. Some property settings may have no effect, or several different property settings may all have the same effect. Settings outside the accepted range may or may not produce an error. For more information on specific drivers, see the manufacturer’s documentation.

Scale Properties

The Printer object has these scale properties:

The ScaleLeft and ScaleTop properties define the x- and y-coordinates, respectively, of the upper-left corner of a printable page. By changing the values of ScaleLeft and ScaleTop, you can create left and top margins on the printed page. For example, you can use ScaleLeft and ScaleTop to center a printed form (PFrm) on the page using these statements:

Printer.ScaleLeft = -((Printer.Width - PFrm.Width) / 2)
Printer.ScaleTop = -((Printer.Height - PFrm.Height) _
   / 2)

Many printers support the Zoom property. This property defines the percentage by which output is scaled. The default value of the Zoom property is 100, indicating that output will be printed at 100 percent of its size (actual size). You can use the Zoom property to make the page you print smaller or larger than the actual paper page. For example, setting Zoom to 50 makes your printed page appear half as wide and half as long as the paper page. The following syntax sets the Zoom property to half the size of the default Printer object:

Printer.Zoom = 50

Positioning Text and Graphics

You can set CurrentX and CurrentY properties for the Printer object, just as you can for forms and picture boxes. With the Printer object, these properties determine where to position output on the current page. The following statements set drawing coordinates to the upper-left corner of the current page:

Printer.CurrentX = 0
Printer.CurrentY = 0

You can also use the TextHeight and TextWidth methods to position text on the Printer object. For more information on using these text methods, see "Displaying Print Output at a Specific Location" earlier in this chapter.

Printing Forms on the Printer Object

You may want your application to print one or more forms along with information on those forms, especially if the design of the form corresponds to a printed document like an invoice or a time card. For the easiest way to do this, use the PrintForm method. For the best quality on a laser printer use the Print and graphics methods with the Printer object. Keep in mind that using the Printer object takes more planning, because you must recreate the form on the Printer object before you print.

Recreating a form on the Printer object may also require recreating:

The extent to which you recreate these elements on the Printer object depends on your application and how much of the form you need to print.

Recreating Text and Graphics on a Form

When creating text and graphics on a form using the Print, Line, Circle, PaintPicture, or PSet methods, you may also want a copy of this output to appear on the Printer object. The easiest way to accomplish this is to write a device-independent procedure to recreate the text and graphics.

For example, the following procedure uses the PaintPicture method to print a form or control’s Picture property to any output object, such as a printer or another form:

Sub PrintAnywhere (Src As Object, Dest As Object)
   Dest.PaintPicture Src.Picture, Dest.Width / 2, _
      Dest.Height / 2
   If Dest Is Printer Then 
      Printer.EndDoc
   End If
End Sub

You then call this procedure and pass it the source and destination objects:

PrintAnywhere MyForm, Printer
PrintAnywhere MyForm, YourForm

For More Information   For more information, see "Print Method," "Line Method," "Circle Method," "Pset Method," or "PaintPicture Method" in the Language Reference.

Printing Controls on a Form

The Printer object can receive the output of the Print method and the graphics methods (such as the Line or PSet method). But you cannot place controls directly on the Printer object. If your application needs to print controls, you must either write procedures that redraw each type of control you use on the Printer object, or use the PrintForm method.

Printing the Contents of the Printer Object

Once you have placed text and graphics on the Printer object, use the EndDoc method to print the contents. The EndDoc method advances the page and sends all pending output to the spooler. A spooler intercepts a print job on its way to the printer and sends it to disk or memory, where the print job is held until the printer is ready for it. For example:

Printer.Print "This is the first line of text in _
   a pair."
Printer.Print "This is the second line of text in _
   a pair."
Printer.EndDoc

Note   Visual Basic automatically calls EndDoc if your application ends without explicitly calling it.

Creating Multiple-Page Documents

When printing longer documents, you can specify in code where you want a new page to begin by using the NewPage method. For example:

Printer.Print "This is page 1."
Printer.NewPage
Printer.Print "This is page 2."
Printer.EndDoc

Canceling a Print Job

You can terminate the current print job by using the KillDoc method. For example, you can query the user with a dialog box to determine whether to print or terminate a document:

Sub PrintOrNot()
   Printer.Print "This is the first line to _
      illustrate KillDoc method"
   Printer.Print "This is the second line to _
      illustrate KillDoc method"
   Printer.Print "This is the third line to _
      illustrate KillDoc method"
   If vbNo = MsgBox("Print this fine document?", _
         vbYesNo) Then
      Printer.KillDoc
   Else
      Printer.EndDoc
   End If
End Sub

If the operating system’s Print Manager is handling the print job, the KillDoc method deletes the entire job you sent to the printer. However, if the Print Manager is not controlling the print job, page one may have already been sent to the printer, and will be unaffected by KillDoc. The amount of data sent to the printer varies slightly among printer drivers.

Note   You cannot use the KillDoc method to terminate a print job that was initiated with the PrintForm method.