Save Page as Metafile (EMF) - and print it as well

    • Offizieller Beitrag

    How to print a page and save the same image as metafile?

    You need to set up a metafile canvas and print to it. Then print this metafile and save the metfile (to a database).

    Code
    procedure PrintPageAsMeta(pagenr : Integer);var metafile: TMetafile;  metacan: TMetafileCanvas;  outRect: TRect;begin  printer.BeginDoc;  metafile := TMetafile.Create;  try    metafile.MMWidth := MulDiv(GetDeviceCaps(Printer.Handle, PHYSICALWIDTH),      2540, GetDeviceCaps(Printer.Handle, LOGPIXELSX));    metafile.MMHeight := MulDiv(GetDeviceCaps(Printer.Handle, PHYSICALHeight),      2540, GetDeviceCaps(Printer.Handle, LOGPIXELSY));    metacan := TMetafileCanvas.Create(metafile,      printer.Canvas.Handle);    try      WPRichText1.PaintPageOnCanvas(        pagenr  - 1,        0, 0, 0, 0, metacan,        [wppWhiteIsTransparent, wppOutputToPrinter],        0, 0, -1, -1, []);    finally      metacan.Free;    end;    outRect.Left := -GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);    outRect.Top := -GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);    outRect.Right := outRect.Left + GetDeviceCaps(Printer.Handle, PHYSICALWIDTH);    outRect.Bottom := outRect.Top + GetDeviceCaps(Printer.Handle, PHYSICALHEIGHT);    Printer.Canvas.StretchDraw(outRect, metafile);    metafile.SaveToFile('c:\page.emf');  finally    metafile.Free;  end;  printer.EndDoc;end;


    This code shows how the page "PageNumber" (1..N) can be only saved as metafile: