Delphi打印表单

时间:2017-04-11 19:57:33

标签: delphi printing

我有一个表格,我需要打印,但只有它的某一部分然后放大(增加比例)。到目前为止,我有以下代码:

procedure TForm1.PrintButtonClick(Sender: TObject);
 var
    printDialog : TPrintDialog;

  begin
  printDialog := TPrintDialog.Create(Form1);
  if printDialog.Execute then
    begin
      Printer.Orientation := poLandscape;    //Better fit than portrait
      Form1.PrintScale:=poPrintToFit;        
      Form1.Print;

    end;
  end;

但是,这会打印整个表单。我已经用Google搜索了一些可能有用的不同内容,但我不确定如何使用它们:

GetFormImage - 有没有办法用这个选择一个特定的区域,还是仅仅采用整个形式?

使用具有给定坐标的矩形,例如rectangle1:= rect(左,上,右,下);但是,如何将矩形缩放到更大的尺寸并打印呢?同样,看起来Delphi只给出了Left和Top属性,右边只是你要去的最左边值的另一个名字吗?

更新 我试图创建一个自定义位图,然后拉伸它但我没有正确使用strechdraw。它在打印时实际上并不伸展:

  procedure TForm1.PrintButtonClick(Sender: TObject);

  var
    printDialog: TPrintDialog;
    Rectangle, stretched: TRect;
    Bitmap: TBitmap;
  begin
    Bitmap := TBitmap.Create;
    try
      Rectangle := Rect(0, 90, 1450, 780);
      stretched := Rect(0, 0, 5000, 3000); //what numbers do i put in here for streching it?
      Bitmap.SetSize(Form1.Width, Form1.Height);
      Bitmap.Canvas.CopyRect(Rectangle, Form1.Canvas, Rectangle);
      Bitmap.Canvas.StretchDraw(stretched, Bitmap); //not sure how to use this
    finally
      printDialog := TPrintDialog.Create(Form1);
      if printDialog.Execute then
      begin
        with printer do
        begin
          BeginDoc;
          Canvas.Draw(0, 90, Bitmap);
          EndDoc;
        end;
      end;
      Bitmap.Free;
    end;
  end;

是尝试还是最后必要的? 当我打印没有拉伸拉伸时它真的很小但是当我用拉伸拉丝打印时,很多图像都丢失了所以我必须使用它错误

1 个答案:

答案 0 :(得分:1)

删除stretched变量和Bitmap.Canvas.StretchDraw(如果您愿意,还可以删除TPrintDialog。)

// Capture your bitmap content here, and then use this code to scale and print.
Printer.Orientation := poLandscape;
Printer.BeginDoc;
Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PageWidth, Printer.PageHeight), Bitmap);
Printer.EndDoc;