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