A ver....
O yo no me entero o tú no entiendes lo que te digo. Intentaré explicarme con un ejemplo. Esto que te pongo a continuación es usando un componente que se llama RolePDF y que se maneja exactamente igual que el objeto printer con lo que todo, o casi todo, tu código te serviría, solo que tendrías que iniciar el canvas con este componente.
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
var
PDF: TrolePDF;
begin
PDF:=TrolePDF.Create(nil);
PDF.BeginDoc ;
PDF.FileName := 'PRUEBA.PDF';
PDF.AutoLaunch := True;
PDF.BeginDoc ;
SetBKMode(PDF.Canvas.Handle, TRANSPARENT);
PDF.Canvas.Brush.Color := 16777215;
PDF.Canvas.Brush.Style := bsSolid;
PDF.Canvas.Pen.Style := psSolid;
PDF.Canvas.Pen.Width := 1;
PDF.Canvas.Pen.Color := 0;
PDF.Canvas.FillRect(Rect(144,114,211,179));
PDF.Canvas.Rectangle(144,114,211,179);
PDF.Canvas.Brush.Color := 9868950;
PDF.Canvas.FillRect(Rect(227,114,294,179));
PDF.Canvas.Rectangle(227,114,294,179);
PDF.Canvas.Brush.Color := 16777215;
PDF.Canvas.FillRect(Rect(310,114,377,179));
PDF.Canvas.Rectangle(310,114,377,179);
PDF.EndDoc ;
PDF.Free;
end;
Este ejemplo lo que hace es crear tres cuadros rellenos y ejecutar el visor de pdf para abrirlo de forma automática.
No sé si esto resuelve tu duda.
Saludos