printer.BeginDoc; //开始打印
     ////////////打印照片信息//////////////////////////
      ms:=tmemorystream.Create;
      jp:=TJpegImage.Create;
      TBlobField(udm.frmDM.AQxyzl.FieldByName('xy_zp')).SaveToStream(ms);
      ms.Position:=0;
      jp.LoadFromStream(ms);//读取照片
      bmp := TBitmap.Create;
      bmp.Width := 700;
      bmp.Height := 900;
      bmp.Canvas.StretchDraw(Rect(0, 0, bmp.Width, bmp.Height), jp);//将照片放大到合适的打印大小
      jp.Assign(bmp);
      printer.Canvas.Draw(FieldByname('c_djb11x').AsInteger,FieldByname('c_djb11y').AsInteger,jp);
      
      ms.Free;
       jp.Free;
       bmp.Free;
      printer.EndDoc;用这段代码打印的照片可以用匪夷所思来相容
有的电脑能打出来,有的打不出,有的换个安装盘符能打出来,有的换个桌面能打出来??????这是为什么???

解决方案 »

  1.   

    试试这样正常吗: 
       printer.BeginDoc; //开始打印 
        ////////////打印照片信息////////////////////////// 
          ms:=tmemorystream.Create; 
          jp:=TJpegImage.Create; 
          TBlobField(udm.frmDM.AQxyzl.FieldByName('xy_zp')).SaveToStream(ms); 
          ms.Position:=0; 
          jp.LoadFromStream(ms);//读取照片 
          bmp := TBitmap.Create; 
          bmp.Width := 700; 
          bmp.Height := 900; 
          bmp.Canvas.StretchDraw(Rect(0, 0, bmp.Width, bmp.Height), jp);//将照片放大到合适的打印大小 
          printer.Canvas.Draw(FieldByname('c_djb11x').AsInteger,FieldByname('c_djb11y').AsInteger,bmp); 
                printer.EndDoc;       ms.Free; 
          jp.Free; 
          bmp.Free; 
      

  2.   

    你可以试打不了的测试打别的看看行不行,说不定是网络问题。还有你的代码还能再简化:printer.BeginDoc; //开始打印 
        ////////////打印照片信息////////////////////////// 
          ms:=tmemorystream.Create; 
          jp:=TJpegImage.Create; 
          TBlobField(udm.frmDM.AQxyzl.FieldByName('xy_zp')).SaveToStream(ms); 
          ms.Position:=0; 
          jp.LoadFromStream(ms);//读取照片 
          printer.Canvas.StretchDraw(Rect(FieldByname('c_djb11x').AsInteger, FieldByname('c_djb11y').AsInteger, 700, 900), jp);//将照片放大到合适的打印大小 
          printer.EndDoc;       ms.Free; 
          jp.Free; 
      

  3.   

    谢谢,我刚才也简化了,
    printer.Canvas.StretchDraw(Rect(FieldByname('c_djb11x').AsInteger, FieldByname('c_djb11y').AsInteger, 700, 900), jp);//
    但是打出来的图片变形了,而且不是设置的位置
      

  4.   

    rect 的位置设置很奇怪,图片打出来反的,请问谁有设置位置的参数说明呀??
      

  5.   

    printer.Canvas.StretchDraw(Rect(FieldByname('c_djb11x').AsInteger, FieldByname('c_djb11y').AsInteger, FieldByname('c_djb11x').AsInteger+700, FieldByname('c_djb11y').AsInteger+900), jp);
    这样可以了,谢谢你,明天测试通过就结贴。