Pobieram informacje o rozmiarze strony, wyliczam pozycje marginesów drukarki, rysuję na Printer.Canvas ramkę za Rantagle tuż przy brzegach marginesów.
Poniżej procedura do wyboru drukarki.
procedure Example_PrintCvS2_Printer();
var _PCvS2: TkPrintCvS2;
begin
frmCvS2.PrintDialog.Copies:= 1;
if not frmCvS2.PrintDialog.Execute then exit;
Printer.Title:='Wydruk';
Printer.BeginDoc;
_PCvS2.Init(Printer); // pobranie wielkości pola wydruku i marginesach
_PCvS2.SetCanvasSize(Printer, cA4);
SetDane(Printer.Canvas, _PCvS2); // wrzucenie danych na Canvas
MDrawTest(Printer.Canvas,1,_PCvS2.Canvpx,_PCvS2.Zakrpx); // oznaczenie pozostałego wolnego miejsca na stronie
Printer.EndDoc;
// To samo co wyżej ale generowanie podglądu na BMP
_PCvS2.Init(nil);
_PCvS2.SetCanvasSize(nil, cA4);
SetDane(_PCvS2.BmpPg.Canvas, _PCvS2);
MDrawTest(_PCvS2.BmpPg.Canvas,1,_PCvS2.Canvpx,_PCvS2.Zakrpx);
// Podgląd na Image
MDraw(frmCvS2.Image, _PCvS2.BmpPg,Trunc(cA4.Width*cPxLmm),Trunc(cA4.Height*cPxLmm));
FreeAndNil(_PCvS2);
end;
Ok poszukam coś na temat tych 600dpi może coś pominąłem, ale dla PDFa mam:
drukOfsX: 0; drukOfsY: 0;
drukSzer: 4958; drukWys: 7016;
dpi.y: 600; dpi.x: 600;
Lewy: 0;
Gorny: 0;
Prawy: 0;
Dolny: 1;
i dla drukarki:
drukOfsX: 100; drukOfsY: 100;
drukSzer: 4760; drukWys: 6814;
dpi.y: 600; dpi.x: 600;
Lewy: 100;
Gorny: 100;
Prawy: 100;
Dolny: 100;
info o rozdzielczości pobierane za pomocą
// rozdzielczość:
dpi.y := GetDeviceCaps(aPrinter.Handle, LOGPIXELSY);
dpi.x := GetDeviceCaps(aPrinter.Handle, LOGPIXELSX);
Przejrzałem kilka przykładów na temat druku i nie wiem co jest grane.