- 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:
Code
var metafile: TMetafile;
metacan: TMetafileCanvas;
outRect: TRect;
begin
SaveDialog1.Title := 'Save page ' +
PageNumber.Caption + ' as metafile';
if SaveDialog1.Execute then
begin
metafile := TMetafile.Create;
try
metafile.Width := MulDiv(WPRichText1.Header.PageWidth, WPScreenPixelsPerInch, 1440);
metafile.Height := MulDiv(WPRichText1.Header.PageHeight, WPScreenPixelsPerInch, 1440);
metacan := TMetafileCanvas.Create(metafile, 0);
try
WPRichText1.PaintPageOnCanvas(PageNumber - 1,
0, 0, 0, 0, metacan,
[wppWhiteIsTransparent, wppOutputToPrinter],
0, 0, -1, -1, []);
finally
metacan.Free;
end;
metafile.SaveToFile(SaveDialog1.FileName);
finally
metafile.Free;
end;
end;
end;
Alles anzeigen