给客户写了一个打印票据的小程序
偷懒 所以采用的是在Webbrowser中显示自己设置的HTML表格
再调用浏览器自身的打印功能去实现打印在自己的电脑上 使用微软的虚拟打印机正常显示...
但是到客户的针式打印机上 就麻烦了因为先需要自己手工设置纸张大小 页眉页脚 边距
但是客户的针式打印机就不会自动保存这些设置
每次调用Webbrowser的打印预览又回到A4状态客户肯定是感觉麻烦了 我也麻烦想通过printers类自己打印 但是对于打印新手的我太复杂
想调用别人的报表进行票据打印 一时又上不了手 赶时间
又想调用EXCEL进行打印 但是这个太占资源 速度又慢不知道在以上选择之外 还有没有什么第三方的免费打印组件
直接设置一下表格形式 传递一下数据 自动设置一下纸张大小 页眉页脚 边距
就能实现"完美打印了"谢谢 求解中 @_@..

解决方案 »

  1.   

    http://topic.csdn.net/u/20110216/14/d8518846-20aa-44cc-bcff-db103da6ab01.html
    可以试下这个
      

  2.   


    var
      I_X, I_Y: Double;
      RR: TRECT;  Device: array[0..MAX_PATH] of Char;
      Driver: array[0..MAX_PATH] of Char;
      Port: array[0..32] of Char;
      hDMode: THandle;
      pDMode: PDevMode;
    begin
      // 获取打印机的单位
      I_X := GetDeviceCaps(Printer.Handle, LOGPIXELSX) / PixelsPerInch;
      I_Y := GetDeviceCaps(Printer.Handle, LOGPIXELSY) / PixelsPerInch;  Printer.GetPrinter(Device, Driver, Port, hDMode);
      if hDMode = 0 then Exit;
      pDMode := GlobalLock(hDMode);
      if pDMode = nil  then Exit;
      pDMode^.dmPaperSize := 256;
      pDMode^.dmPaperWidth  := 1700;
      pDMode^.dmPaperLength := 900;
      pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE;
      pDMode^.dmFields := pDMode^.dmFields or DM_PAPERLENGTH;
      pDMode^.dmFields := pDMode^.dmFields or DM_PAPERWIDTH;
      ResetDC(Printer.Handle, pDMode^);
      GlobalUnlock(hDMode);  with Printer do
      begin
        BeginDoc;
        RR := Rect(0, 0, Trunc(Image1.Picture.Width * I_X), Trunc(Image1.Picture.Height * I_Y));
        Canvas.StretchDraw(RR, Image1.Picture.Graphic);
        EndDoc;
      end;
    end;
    换成这样的了 自己感觉效果还行 明天发客户验证下了