No obawiam się, że musimy skalować...
// domyślna drukarka
TPrinter* output = Printer();
// marginesy
int MarginH = 200;
int MarginW = 200;
// wymiary prostokątów: rysowanego, oraz strony
TRect rSource = Panel1->ClientRect;
TRect rTarget = TRect(MarginW, MarginH, output->PageWidth-MarginW, output->PageHeight-MarginH);
// rysujemy na bitmapę na boku
Graphics::TBitmap* temp = new Graphics::TBitmap();
temp->Width = Panel1->Width;
temp->Height = Panel1->Height;
Panel1->PaintTo(temp->Canvas, 0, 0);
// drukujemy skalując
output->BeginDoc();
output->Canvas->CopyRect(rTarget, temp->Canvas, rSource);
output->EndDoc();
// wywalamy bitmapę z obku
delete temp;
Co się dzieje, to wszyscy wiemy. Skalowanie ma to do siebie, że nie jest wektorowe - w końcu skalujemy obrazek, a nie tekst. No i napisy są po prostu brzydkie, jeśli Panel zrobimy mały, a rozciągniemy go na całą stronę (j.w.)
Coby tego uniknąć, to nie ma rady. Rysujemy po Canvasie drukarki ręcznie. Za pmocą CopyRect wstawiamy obrazek. Za pomocą TextOut piszemy tekst odpowiednią czcionką (Canvas->Font). Ale to już nie takie wygodne, chociaż w rzadkich wypadkach ładniejsze (w końcu obrazek i tak straszy pikselami, jeśli jest mały, a rozciągnięcie było dużo).