|
HTMLView |
Top Previous Next |
|
With the latest THTMLView version we recommend to use this code:
var MFPrinter : TMetafilePrinter; page : Integer; w,h,res : Integer; WPPDFPrinter1 : TWPCustomPDFExport; begin MFPrinter := TMetafilePrinter.Create(Self); WPPDFPrinter1 := TWPCustomPDFExport.Create(Self); WPPDFPrinter1.FileName := 'c:\fromhtml.pdf'; WPPDFPrinter1.AutoLaunch := TRUE; try Viewer.PrintPreview(MFPrinter); WPPDFPrinter1.CanvasReference := wprefPrinter; WPPDFPrinter1.BeginDoc; res := MFPrinter.PixelsPerInchX; for page := 0 to MFPrinter.LastAvailablePage-1 do begin w := MulDiv(MFPrinter.PaperWidth,res,MFPrinter.PixelsPerInchX); h := MulDiv(MFPrinter.PaperHeight,res,MFPrinter.PixelsPerInchy); WPPDFPrinter1.StartPage(w,h,res, res, 0 ); WPPDFPrinter1.Canvas.Draw(0,0,MFPrinter.MetaFiles[Page]); WPPDFPrinter1.EndPage; end; WPPDFPrinter1.EndDoc; finally MFPrinter.Free; WPPDFPrinter1.Free; end; end;
The line "WPPDFPrinter1.CanvasReference := wprefPrinter;" is optional.
A customer sent us this tip:
I have fixed the problem with the THTMLViewer component. In case it helps, in the TMetaFilePrinter.pas supplied with the THMTLViewer package, the reference DC used in the call to TMetaFileCanvas.Create was 0, i.e. the screen, but everything else is based off the printer, hence the mismatch. Easily fixed by changing the 0 to PrinterDC:
procedure TMetaFilePrinter.NewPage; ... begin ... NewCanvas := TMetaFileCanvas.Create(MetaFile, PrinterDC); |