added HTML printing

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4030 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
1999-10-17 13:03:40 +00:00
parent 30760ce7e5
commit 3ce369e687
25 changed files with 1568 additions and 538 deletions

View File

@@ -90,9 +90,12 @@
\input htcell.tex
\input htcolor.tex
\input htcontnr.tex
\input htdcrend.tex
\input hteasypr.tex
\input htfilter.tex
\input hthelpct.tex
\input htparser.tex
\input htprint.tex
\input httag.tex
\input httaghnd.tex
\input httagmod.tex

129
docs/latex/wx/htdcrend.tex Normal file
View File

@@ -0,0 +1,129 @@
%
% automatically generated by HelpGen from
% htmprint.h at 17/Oct/99 12:48:02
%
\section{\class{wxHtmlDCRenderer}}\label{wxhtmldcrenderer}
This class can render HTML document into specified area of DC. You can use it
in your own printing code, although use of \helpref{wxHtmlEasyPrinting}{wxhtmleasyprinting}
or \helpref{wxHtmlPrintout}{wxhtmlprintout} is strongly recommended.
\wxheading{Derived from}
\helpref{wxObject}{wxobject}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxHtmlDCRenderer::wxHtmlDCRenderer}\label{wxhtmldcrendererwxhtmldcrenderer}
\func{}{wxHtmlDCRenderer}{\void}
Constructor.
\membersection{wxHtmlDCRenderer::SetDC}\label{wxhtmldcrenderersetdc}
\func{void}{SetDC}{\param{wxDC* }{dc}, \param{int }{maxwidth}}
Assign DC instance to the renderer.
\wxheading{Parameters}
\docparam{maxwidth}{width of the area (on this DC) that is equivalent to screen's width,
in pixels (you should set it to page width minus margins).
{\bf Note:} In current implementation
screen width is always 800 pixels : it gives best results and ensures (almost) same printed outputs
across platforms and differently configured desktops.}
Also see \helpref{SetSize}{wxhtmldcrenderersetsize}
\membersection{wxHtmlDCRenderer::SetSize}\label{wxhtmldcrenderersetsize}
\func{void}{SetSize}{\param{int }{width}, \param{int }{height}}
Set size of output rectangle, in pixels. Note that you {\bf can't} change
width of the rectangle between calls to \helpref{Render}{wxhtmldcrendererrender}!
(You can freely change height.)
If you set width equal to maxwidth then HTML is rendered as if it were displayed in fullscreen.
If you set width = 1/2 maxwidth the it is rendered as if it covered half the screen
and so on.
\membersection{wxHtmlDCRenderer::SetHtmlText}\label{wxhtmldcrenderersethtmltext}
\func{void}{SetHtmlText}{\param{const wxString\& }{html}, \param{const wxString\& }{basepath = wxEmptyString}, \param{bool }{isdir = TRUE}}
Assign text to the renderer. \helpref{Render}{wxhtmldcrendererrender} then draws
the text onto DC.
\wxheading{Parameters}
\docparam{html}{HTML text. (NOT file!)}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\docparam{isdir}{FALSE if basepath is filename, TRUE if it is directory name
(see \helpref{wxFileSystem}{wxfilesystem} for detailed explanation)}
\membersection{wxHtmlDCRenderer::Render}\label{wxhtmldcrendererrender}
\func{int}{Render}{\param{int }{x}, \param{int }{y}, \param{int }{from = 0}, \param{int }{dont\_render = FALSE}}
Renders HTML text to the DC.
\wxheading{Parameters}
\docparam{x,y}{ position of upper-left corner of printing rectangle (see \helpref{SetSize}{wxhtmldcrenderersetsize})}
\docparam{from}{y-coordinate of the very first visible cell}
\docparam{dont\_render}{if TRUE then this method only returns y coordinate of the next page
and does not output anything}
Returned value is y coordinate of first cell than didn't fit onto page.
Use this value as {\it from} in next call to Render in order to print multipages
document.
\wxheading{Caution!}
Following 3 methods {\bf must} always be called before any call to Render (preferably
in this order):
\begin{itemize}
\item \helpref{SetDC}{wxhtmldcrenderersetdc}
\item \helpref{SetSize}{wxhtmldcrenderersetsize}
\item \helpref{SetHtmlText}{wxhtmldcrenderersethtmltext}
\end{itemize}
{\bf Render() changes DC's user scale and does NOT restore it!!}
\membersection{wxHtmlDCRenderer::GetTotalHeight}\label{wxhtmldcrenderergettotalheight}
\func{int}{GetTotalHeight}{\void}
Returns height of the HTML text. This is important if area height (see \helpref{SetSize}{wxhtmldcrenderersetsize})
is smaller that total height and thus the page cannot fit into it. In that case you're supposed to
call \helpref{Render}{wxhtmldcrendererrender} as long as it's return value is smaller than GetTotalHeight's.

151
docs/latex/wx/hteasypr.tex Normal file
View File

@@ -0,0 +1,151 @@
%
% automatically generated by HelpGen from
% htmprint.h at 17/Oct/99 12:48:02
%
\section{\class{wxHtmlEasyPrinting}}\label{wxhtmleasyprinting}
This class provides very simple interface to printing
architecture. It allows you to print HTML documents only
with very few commands.
\wxheading{Note}
Do not create this class on stack only. You should create an instance on app
startup and use this instance for all printing operations. The reason is that
this class stores various settings in it.
\wxheading{Derived from}
\helpref{wxObject}{wxobject}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxHtmlEasyPrinting::wxHtmlEasyPrinting}\label{wxhtmleasyprintingwxhtmleasyprinting}
\func{}{wxHtmlEasyPrinting}{\param{const wxString\& }{name = "Printing"}, \param{wxFrame* }{parent\_frame = NULL}}
Constructor.
\wxheading{Parameters}
\docparam{name}{Name of the printing. Used by preview frames and setup dialogs.}
\docparam{parent\_frame}{pointer to the frame that will own preview frame and setup dialogs. May be NULL.}
\membersection{wxHtmlEasyPrinting::PreviewFile}\label{wxhtmleasyprintingpreviewfile}
\func{void}{PreviewFile}{\param{const wxString\& }{htmlfile}}
Previews HTML file.
\membersection{wxHtmlEasyPrinting::PreviewText}\label{wxhtmleasyprintingpreviewtext}
\func{void}{PreviewText}{\param{const wxString\& }{htmltext}, \param{const wxString\& }{basepath = wxEmptyString}}
Previews HTML text (not file!).
\wxheading{Parameters}
\docparam{htmltext}{HTML text.}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\membersection{wxHtmlEasyPrinting::PrintFile}\label{wxhtmleasyprintingprintfile}
\func{void}{PrintFile}{\param{const wxString\& }{htmlfile}}
Prints HTML file.
\membersection{wxHtmlEasyPrinting::PrintText}\label{wxhtmleasyprintingprinttext}
\func{void}{PrintText}{\param{const wxString\& }{htmltext}, \param{const wxString\& }{basepath = wxEmptyString}}
Prints HTML text (not file!).
\wxheading{Parameters}
\docparam{htmltext}{HTML text.}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\membersection{wxHtmlEasyPrinting::PrinterSetup}\label{wxhtmleasyprintingprintersetup}
\func{void}{PrinterSetup}{\void}
Displays printer setup dialog and allows the user to modify settings.
\membersection{wxHtmlEasyPrinting::PageSetup}\label{wxhtmleasyprintingpagesetup}
\func{void}{PageSetup}{\void}
Displays page setup dialog and allows the user to modify settings.
\membersection{wxHtmlEasyPrinting::SetHeader}\label{wxhtmleasyprintingsetheader}
\func{void}{SetHeader}{\param{const wxString\& }{header}, \param{int }{pg = wxPAGE\_ALL}}
Sets page header.
\wxheading{Parameters}
\docparam{header}{HTML text to be used as header. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlEasyPrinting::SetFooter}\label{wxhtmleasyprintingsetfooter}
\func{void}{SetFooter}{\param{const wxString\& }{footer}, \param{int }{pg = wxPAGE\_ALL}}
Sets page footer.
\wxheading{Parameters}
\docparam{footer}{HTML text to be used as footer. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlEasyPrinting::GetPrintData}\label{wxhtmleasyprintinggetprintdata}
\func{wxPrintData*}{GetPrintData}{\void}
Returns pointer to \helpref{wxPrintData}{wxprintdata} instance used by this class. You can
set its parameters (via SetXXXX methods).
\membersection{wxHtmlEasyPrinting::GetPageSetupData}\label{wxhtmleasyprintinggetpagesetupdata}
\func{wxPageSetupDialogData*}{GetPageSetupData}{\void}
Returns pointer to \helpref{wxPageSetupDialogData}{wxpagesetupdialogdata} instance used by
this class. You can set its parameters (via SetXXXX methods).

View File

@@ -1,63 +1,14 @@
\membersection{Printing}\label{printing}
\membersection{HTML Printing}\label{printing}
The wxHTML library provides printing facilities.
The wxHTML library provides printing facilities with several levels of complexity.
You can redirect output displayed by \helpref{wxHtmlWindow}{wxhtmlwindow}
to the printer DC using this (or similar) code (see {\bf printing} sample for
more details) :
The easiest way to print an HTML document is to use
\helpref{wxHtmlEasyPrinting class}{wxhtmleasyprinting}. It lets you print HTML documents with only one
command and you don't have to care about wxPrintouts etc. at all. It is only simple wrapper around
\helpref{wxHtmlPrintout}{wxhtmlprintout}, normal wxWindows printout class.
\begin{verbatim}
//
// This method prints page number one to dc:
//
void MyPrintout::DrawPageOne(wxDC *dc)
{
int leftMargin = 20;
int topMargin = 50;
// You must compute the margins there.
// Caution! These values are NOT in printer DC's units.
// These values are in screen pixels.
// (see bellow)
// Here we obtain internal cell representation of HTML document:
// (html is our pointer to wxHtmlWindow object)
wxHtmlContainerCell *cell = html -> GetInternalRepresentation();
// Now we have to check in case our real page size is reduced
// (e.g. because we're drawing to a print preview memory DC)
int pageWidth, pageHeight;
int w, h;
dc->GetSize(&w, &h); // DC size
GetPageSizePixels(&pageWidth, &pageHeight); // real size
// Now we must scale it. This equation will map wxHtmlWindow
// to page in this way:
// |--this is whole page as printed---------|
// | | | |
// | | | |
// |-margin-|-----wxHtmlWindow-----|-margin-|
//
// So page width is 2*leftMargin + [wxHtmlWindow size]
// (measured in screen pixels).
// We will scale the printer DC so that wxHtmlWindow's content
// spreads from left to right:
float scale = (float)(
(float)(pageWidth) /
(float)(2 * leftMargin + cell -> GetMaxLineWidth()));
// If printer pageWidth == current DC width, then this doesn't
// change. But w might be the preview bitmap width, so scale down.
float overallScale = scale * (float)(w/(float)pageWidth);
// Set the user scale so that our computations take effect:
dc->SetUserScale(overallScale, overallScale);
dc->SetBackgroundMode(wxTRANSPARENT);
// And this is - finally - HTML stuff:
cell -> Draw(*dc, leftMargin, topMargin, 0, cell -> GetHeight());
}
\end{verbatim}
(Thanks to Julian Smart for sample)
And finally there is low level class \helpref{wxHtmlDCRenderer}{wxhtmldcrenderer} which you can use to
render HTML into rectangular area on any DC. It supports rendering into multiple rectangles with same
width. (Most common use is placing one rectangle on each page or printing into two columns.)

96
docs/latex/wx/htprint.tex Normal file
View File

@@ -0,0 +1,96 @@
%
% automatically generated by HelpGen from
% htmprint.h at 17/Oct/99 12:48:02
%
\section{\class{wxHtmlPrintout}}\label{wxhtmlprintout}
This class serves as printout class for HTML documents.
\wxheading{Derived from}
\helpref{wxPrintout}{wxprintout}
\latexignore{\rtfignore{\wxheading{Members}}}
\membersection{wxHtmlPrintout::wxHtmlPrintout}\label{wxhtmlprintoutwxhtmlprintout}
\func{}{wxHtmlPrintout}{\param{const wxString\& }{title = "Printout"}}
Constructor.
\membersection{wxHtmlPrintout::SetHtmlText}\label{wxhtmlprintoutsethtmltext}
\func{void}{SetHtmlText}{\param{const wxString\& }{html}, \param{const wxString\& }{basepath = wxEmptyString}, \param{bool }{isdir = TRUE}}
Prepare the class for printing this HTML text.
\wxheading{Parameters}
\docparam{html}{HTML text. (NOT file!)}
\docparam{basepath}{base directory (html string would be stored there if it was in
file). It is used to determine path for loading images, for example.}
\docparam{isdir}{FALSE if basepath is filename, TRUE if it is directory name
(see \helpref{wxFileSystem}{wxfilesystem} for detailed explanation)}
\membersection{wxHtmlPrintout::SetHtmlFile}\label{wxhtmlprintoutsethtmlfile}
\func{void}{SetHtmlFile}{\param{const wxString\& }{htmlfile}}
Prepare the class for printing this HTML {\bf file}. The file may be located on
any virtual file system or it may be normal file.
\membersection{wxHtmlPrintout::SetHeader}\label{wxhtmlprintoutsetheader}
\func{void}{SetHeader}{\param{const wxString\& }{header}, \param{int }{pg = wxPAGE\_ALL}}
Sets page header.
\wxheading{Parameters}
\docparam{header}{HTML text to be used as header. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlPrintout::SetFooter}\label{wxhtmlprintoutsetfooter}
\func{void}{SetFooter}{\param{const wxString\& }{footer}, \param{int }{pg = wxPAGE\_ALL}}
Sets page footer.
\wxheading{Parameters}
\docparam{footer}{HTML text to be used as footer. You can use macros in it:
\begin{itemize}
\item @PAGENUM@ is replaced by page number
\item @PAGESCNT@ is replaced by total number of pages
\end{itemize}
}
\docparam{pg}{one of wxPAGE\_ODD, wxPAGE\_EVEN and wxPAGE\_ALL constants.}
\membersection{wxHtmlPrintout::SetMargins}\label{wxhtmlprintoutsetmargins}
\func{void}{SetMargins}{\param{float }{top = 25.2}, \param{float }{bottom = 25.2}, \param{float }{left = 25.2}, \param{float }{right = 25.2}, \param{float }{spaces = 5}}
Sets margins in milimeters. Defaults to 1 inch for margins and 0.5cm for space
between text and header and/or footer