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);