怎样控制打印?(50分)

  • 主题发起人 主题发起人 datoncg
  • 开始时间 开始时间
D

datoncg

Unregistered / Unconfirmed
GUEST, unregistred user!
想将数据打印到已有的固定的凭证(不是自己设计的)中去,怎样实现?
就象银行那样。
 
用票据打印机,并在程序中控制打印信息的位置。
 
把格式设好就行啊,与一般的打印没什么区别吧。
 
照实物画一个,再将各项填入其中,此乃套打!
 
to Jams:
详细点!举个例子吧,如增值税发票。
 
增值税发票本人不接触,但我想:
将发票的各项全部路人到到数据库,即建个结构,而后用Quick Report之类的
将库中的内容(只一条记录),打到对应的位置即可。
 
我习惯用比较底层的办法,直接在Printer对象的Canvas上写,可以很方便地控制格
式与位置,以下是一段最简单的示例:
procedure DrawPrint(FtSize: Integer;XPos,YPos: Integer;Str: String);
begin

with Printer.Canvasdo

begin

Pen.Color:=clRed;
Font.Name:='宋体';
Font.Size:=FtSize;
Textout(XPos,YPos,Str);
end;

end;

要使用Printer对象,需要在Uses中加入Printers单元,Delphi会自动创建Printer
对象。
如果要在程序中使用上面这个方法打印,示例如下:
...
procedure TMainForm.Print;//假定Print是TMainForm的一个方法
begin

try
Printer.begin
Doc;
DrawPrint(10,50,50,'这是一个使用Printer对象的例子');
finally
Printer.EndDoc;
end;

end;

...
如果要循环打印,只要在每一次循环的开始或结束调用Printer的NewPage方法即可。
使用try...finally...end是为了保证在发生异常时可以结束打印任务。
详细介绍参看帮助文件。
这种方法用来解决打印发票这类打印尺寸、位置固定的问题,可能算比较简单。
 
基本上我写的打印程序如果不复杂的话同Alarm一样,优点是打印位置可以精确控制
缺点是程序量太大维护不易
 
to alarm
我这要打到的位置怎样确定,用尺子去量票据?
to jams
>打到对应的位置即可
这个位置怎样确定?
 
有关套打本论坛已有。见报表类。

搞一个外部文件,类似.ini文件,记录所有要打印内容的位置,
单位是0.1mm,打印时读出来。即使偏一点,运行时也可以调整。

0.1mm到Pixel的转换是:

RateX := MulDiv(GetDeviceCaps(Printer.Handle, LOGPIXELSX), 1000, 254);
RateY := MulDiv(GetDeviceCaps(Printer.Handle, LOGPIXELSY), 1000, 254);

PixelX := Muldiv(mmX, RateX, 1000);
PixelY := Muldiv(mmY, RateY, 1000);

做成函数最好。
 
可用DJPrint控件,实现套打。
 
to xmboy:
DJPrint控件,给我一份!
my email:datoncg1@21cn.com

 
给个详细的过程例子,好结束这个问题!
 
多人接受答案了。
 

DJPrint控件,给我一份!
my email:dht@www.bjpeu.edu.cn
 
后退
顶部