]> git.saurik.com Git - wxWidgets.git/blame - docs/latex/wx/tprint.tex
Introduced the ability to size a book control based on the currently selected page
[wxWidgets.git] / docs / latex / wx / tprint.tex
CommitLineData
a660d684
KB
1\section{Printing overview}\label{printingoverview}
2
7bcb11d3
JS
3Classes: \helpref{wxPrintout}{wxprintout},
4\helpref{wxPrinter}{wxprinter},
5\helpref{wxPrintPreview}{wxprintpreview},
6\helpref{wxPrinterDC}{wxprinterdc},
7\helpref{wxPrintDialog}{wxprintdialog},
8\helpref{wxPrintData}{wxprintdata},
9\helpref{wxPrintDialogData}{wxprintdialogdata},
10\helpref{wxPageSetupDialog}{wxpagesetupdialog},
11\helpref{wxPageSetupDialogData}{wxpagesetupdialogdata}
a660d684
KB
12
13The printing framework relies on the application to provide classes
14whose member functions can respond to particular requests, such
15as `print this page' or `does this page exist in the document?'.
fc2171bd 16This method allows wxWidgets to take over the housekeeping duties of
a660d684
KB
17turning preview pages, calling the print dialog box, creating
18the printer device context, and so on: the application can concentrate
19on the rendering of the information onto a device context.
a660d684 20
c436b310
RR
21The \helpref{document/view framework}{docviewoverview} creates a default
22wxPrintout object for every view, calling wxView::OnDraw to achieve a
a660d684
KB
23prepackaged print/preview facility.
24
25A document's printing ability is represented in an application by a
26derived wxPrintout class. This class prints a page on request, and can
27be passed to the Print function of a wxPrinter object to actually print
28the document, or can be passed to a wxPrintPreview object to initiate
29previewing. The following code (from the printing sample) shows how easy
30it is to initiate printing, previewing and the print setup dialog, once the wxPrintout
31functionality has been defined. Notice the use of MyPrintout for
32both printing and previewing. All the preview user interface functionality
fc2171bd 33is taken care of by wxWidgets. For details on how MyPrintout is defined,
a660d684
KB
34please look at the printout sample code.
35
36\begin{verbatim}
37 case WXPRINT_PRINT:
38 {
39 wxPrinter printer;
40 MyPrintout printout("My printout");
cc81d32f 41 printer.Print(this, &printout, true);
a660d684
KB
42 break;
43 }
44 case WXPRINT_PREVIEW:
45 {
46 // Pass two printout objects: for preview, and possible printing.
47 wxPrintPreview *preview = new wxPrintPreview(new MyPrintout, new MyPrintout);
dbd94b75 48 wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650));
a660d684
KB
49 frame->Centre(wxBOTH);
50 frame->Initialize();
cc81d32f 51 frame->Show(true);
a660d684
KB
52 break;
53 }
a660d684
KB
54\end{verbatim}
55
c436b310
RR
56\section{Printing under Unix (GTK+)}\label{unixprinting}
57
58Printing under Unix has always been a cause of problems as Unix
59does not provide a standard way to display text and graphics
60on screen and print it to a printer using the same application
61programming interface - instead, displaying on screen is done
62via the X11 library while printing has to be done with using
63PostScript commands. This was particularly difficult to handle
64for the case of fonts with the result that only a selected
65number of application could offer WYSIWYG under Unix. Equally,
66wxWidgets offered its own printing implementation using PostScript
67which never really matched the screen display.
68
69Starting with version 2.8.X, the GNOME project provides printing
70support through the libgnomeprint and libgnomeprintui libraries
71by which especially the font problem is mostly solved. Beginning
72with version 2.5.4, the GTK+ port of wxWidgets can make use of
73these libraries if wxWidgets is configured accordingly and if the
74libraries are present. You need to configure wxWidgets with the
75{\it configure --with-gnomeprint} switch and you application will
76then search for the GNOME print libraries at runtime. If they
77are found, printing will be done through these, otherwise the
78application will fall back to the old PostScript printing code.
79Note that the application will not require the GNOME print libraries
80to be installed in order to run (there will be no dependency on
81these libraries).
82
83It is expected that the printing code that is currently implemented
84in the GNOME print libraries will be moved into GTK+ later.
dceb1c09 85