用 PIL 库生成图形格式的报表

def MakeReport(Name='', Sex='', Addr='', Seal=False, OutFile='tmp.png'):
    if (Seal):
    	# 带公章图案的空白模板(FastReport 保存的 png 文件,300dpi)
        img = Image.open('L_S.png') 
    else:
    	# 不带公章图案的空白模板(FastReport 保存的 png 文件,300dpi)
        img = Image.open('L_N.png') 

    draw = ImageDraw.Draw(img)

    # 楷体,16号
    setFont = ImageFont.truetype('simkai', 50)
    fillColor = "#000000"

    # 需要多次模拟输出尝试取得最合适的文字座标
    draw.text((590, 900),  Name, font=setFont, fill=fillColor)                  # 姓名
    draw.text((1150, 900), Sex, font=setFont, fill=fillColor)                   # 性别
    draw.text((590, 1020),  Addr, font=setFont, fill=fillColor)                  # 现住址
    
    img.save(OutFile)

附:空白的模板图像可以在 Delphi 中用以下代码生成:

uses
  frxExportImage;

procedure TForm1.btnExportClick(Sender: TObject);
var
  frxPNGExport1: TfrxPNGExport;
begin
  frxPNGExport1 := TfrxPNGExport.Create(nil);
  //frxReport1.LoadFromFile('d:\l.fr3');
  frxReport1.PrepareReport();
  frxPNGExport1.SeparateFiles := false;
  frxPNGExport1.Monochrome := false;
  frxPNGExport1.CropImages := false;

  // 如果需要更高分辨率,可以改动下面的数值
  frxPNGExport1.Resolution := 300;

  frxPNGExport1.OpenAfterExport := false;
  frxPNGExport1.ShowProgress := false;
  frxPNGExport1.ShowDialog := false;
  frxPNGExport1.FileName := 'd:\export.png';

  frxReport1.Export(frxPNGExport1);
  ShowMessage('已导出为:' + frxPNGExport1.FileName);
end;
posted @ 2023-06-25 16:55  汉学  阅读(28)  评论(0)    收藏  举报