Printing |
The system controls the overall printing process, just like it controls when and how a program can draw. Your application provides information about the document to be printed, and the printing system determines when each page needs to be rendered.This callback printing model enables printing to be supported on a wide range of printer and systems. It even allows users to print to a bitmap printer from a computer that doesn't have enough memory or disk space to hold the bitmap of an entire page. In this situation the printing system will ask your application to render the page repeatedly so that it can be printed as a series of smaller images. (These smaller images are typically referred to as bands, and this process is commonly called banded printing.)
To support printing, an application needs to perform two tasks:
- Job control--managing the print job
- Imaging--rendering the pages to be printed
Job Control
Although the system controls the overall printing process, your application has to get the ball rolling by setting up aPrinterJob
. ThePrinterJob
, the key point of control for the printing process, stores the print job properties, controls the display of print dialogs, and is used to initiate printing.To steer the
PrinterJob
through the printing process, your application needs to
- Get a
PrinterJob
by callingPrinterJob.getPrinterJob
- Tell the
PrinterJob
where the rendering code is by callingsetPrintable
orsetPageable
- If desired, display the Page Setup and Print dialogs by calling
pageDialog
andprintDialog
- Initiate printing by calling
The rendering of pages is controlled by the printing system through calls to the application's imaging code.
Imaging
Your application must be able to render any page when the printing system requests it. This rendering code is contained in thePrintable
interface. You implementGraphics
or aGraphics2D
rendering context. You can use either one page painter to render all of the pages in a print job or different page painters for different types of pages. When the printing system needs to render a page, it callsWhen you use a single page painter, the print job is called a printable job. Using a printable job is the simplest way to support printing. More complex printing operations that use multiple page painters are referred to as pageable jobs. In a pageable job an instance of a class that implements the
Pageable
interface is used to manage the page painters.Printable Jobs
In a printable job all pages use the same page painter andPageFormat
, which defines the size and orientation of the page to be printed. The page painter is asked to render each page in indexed order, starting the page at index 0. The page painter might be asked to render a page multiple times before the next page is requested, but no pages are skipped. For example, if a user prints pages 2 and 3 of a document, the page painter is asked to render the pages at indices 0, 1, and 2 even though the page at index 0 will not be printed.If a print dialog is presented, it will not display the number of pages, because that information is not available to the printing system. The page painter informs the printing system when the end of the document is reached.
Pageable Jobs
Pageable jobs are useful if your application builds an explicit representation of a document, page by page. In a pageable job different pages can use different page painters andPageFormats
. The printing system can ask the page painters to render pages in any order, and pages can be skipped. For example, if a user prints pages 2 and 3 of a document, the page painter will be asked to render only the pages at indices 1 and 2.The multiple page painters in a pageable job are coordinated by a class that implements the
Pageable
interface, such asBook
. ABook
represents a collection of pages that can use different page painters and that can vary in size and orientation. You can also use your own implementation of thePageable
interface ifBook
does not meet your application's needs.
Printing |