打印发票源码? 500分奉送!!!!(100分)

  • 主题发起人 主题发起人 海马
  • 开始时间 开始时间
想怎么打就怎么打.
begin
// 打印 票据
Printer.Title := '打印专用发票:' + fphm.Text + ' 开票人:' + zd.Text;
Printer.begin
Doc;
Printer.Canvas.Font.Name := '宋体';
Printer.Canvas.Font.Style := [fsBold];
Printer.Canvas.Font.Size := 11;
Printer.Canvas.TextOut(Y + 1350, X + 100, khyh.Text);
Printer.Canvas.TextOut(Y + 1350, X + 130, zh.Text);
Printer.Canvas.TextOut(Y + 132, X + 206, fkdw.Text);
Printer.Canvas.TextOut(Y + 812, X + 206, Copy(kprq.Text, 7, 4) + '年' +
Copy(kprq.Text, 1, 2) + '月' +
Copy(kprq.Text, 4, 2) + '日');
Printer.Canvas.TextOut(Y + 334, X + 265, cm.Text + hc.Text + hb.Text + cc.Text);
Printer.Canvas.TextOut(Y + 956, X + 265, tydh.Text);
Printer.Canvas.TextOut(Y + 1356, X + 265, Copy(khrq.Text, 7, 4) + '年' +
Copy(khrq.text, 1, 2) + '月' +
Copy(khrq.text, 4, 2) + '日');
Printer.Canvas.TextOut(Y + 162, X + 312, qyg.Text);
Printer.Canvas.TextOut(Y + 632, X + 880, swdjh.Text);
//税务登记
Printer.EndDoc;
end;
可给分了吗?哈!
 
但是走纸张还是 A4 ,能解决纸张定义吗
 
打印必定与数据库有关,如打印成功则修改数据库记录,不成功则放弃修改数据库记录.
这样就需要判断打印机是否准备就绪,我们知道在win98下可以通过汇编程序读计算机串口,
但在winNT,Win2000下不能通过汇编程序读计算机串口,那么该如何判断打印机?
 
//但是走纸张还是 A4 ,能解决纸张定义吗
需要去管它吗?
不需要!!!
 
我写过类似的程序,是给一家公路客运站写收费凭证。主要是不通过WINDOWS进行打印,
而是把控制码直接送打印机,随便你用什么纸。如果你写过UNIX或DOS下的打印程序,会有体会。
如果有感兴趣的,我可以把那部分代码拷出来。
 
不过 windows 是好.
可是. 那你得 写好多的 驱动吧.
不一样的 打印机
会不一样的吧. 我用的是 windows 的 驱动, 还省心.
 
to 山猫
只要针对常用的控制码就行了(如LQ系列),不是很麻烦。你可能是不习惯非windows的编程。
至于其它种类的控制码,可采取仿真的方式。
如果还不满意,你可以做一个控制码管理界面,很简单,管理起来和以前的佳创通用工资
管理程序的打印管理差不多。
不过你的写好了,能与我分享吗?我很想借鉴一下。
 
to lyfwz
因为我要做的是 发票打印. 所以, 很可能要用到 平推 打印机,
而一般的平推 打印机种多,驱动不太兼容 , 也不太好说 仿真,
让开票员去 选择控制码也是不太现实的事. 他们能会开票就不错了.
因为我写的程序 是 内部为 小规模 纳税人代开发票用的.
所以. 不可以把全部的代码库给大家, 如大家有兴趣, 我可以给大家 打印的部分 .
 
to all:
忘 了说了. 是打增值 票的. 所以. 才这么小心, 对不起大家.
 
Lyfwz:
将你的代码发一个给我吧
z_w_q@10mail.net
 

//设置纸张大小
procedure printer_set;
var
Device:Array[0..256] of Char;
Driver:Array[0..256] of Char;
Port:Array[0..32] of Char;
hDMode:THandle;
pDMode:PDevMode;
begin
Printer.GetPrinter(Device,Driver,Port,hDMode);
if hDMode<>0 then
pDMode:=GLobalLock(hDMode);
if pDMode<>nil then
begin
pDMode^.dmPaperSize:=256;
pDMode^.dmPaperLength:=900;
pDMode^.dmPaperWidth:=2900;
pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERSIZE;
pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERLENGTH;
pDMode^.dmFields:=pDMode^.dmFields or DM_PAPERWIDTH;
end;
ResetDC(Printer.Handle,pDMode^);
GLobalUnLock(hDMode);
end;

//发送控制码
Procedure DirectPrint(s : String);
var
PTBlock : TPassThroughData;
begin

PTBlock.nLen := Length(s);
StrPCopy(@PTBlock.Data,s);
Escape(printer.handle, PASSTHROUGH,0,@PTBlock,nil);
end;

//调用Directprint 发送控制码,打印
Procedure PrintESC;
var xm:string;
ch:string;
je:string;
znj:string;
sds:string;
rq:string;
jedx:string;
i:integer;
begin
xm:=strtostr(8,form1.sjxmedit.text);
ch:=strtostr(10,form1.chedit.text);
je:=strtostr(10,formatfloat('###,###,###,##0.00',strtofloat(form1.jeedit.text)));
znj:=strtostr(10,formatfloat('###,###,###,##0.00',strtofloat(form1.znjedit.text)));
sds:=strtostr(10,formatfloat('###,###,###,##0.00',strtofloat(form1.sdsedit.text)));
rq:=strtostr(10,form1.rqedit.text);
jedx:=form1.jedxEdit.Text;
i:=length(jedx);
while 58-i>0do
begin
jedx:=jedx+' ';
i:=i+1;
end;

Printer.begin
Doc;
DirectPrint(CHR(28)+chr(101)+chr(32)+chr(32)+' 客运公司收费单 ');
directprint(chr(10)+chr(13)+'┌────┬─────┬─────┬─────┬─────┬─────┐ ');
DirectPrint(chr(10)+chr(13)+'│姓名 │车号 │金额 │滞纳金 │日期 │代征所得税│ ');
directprint(chr(10)+chr(13)+'├────┼─────┼─────┼─────┼─────┼─────┤ ');
DirectPrint(chr(10)+chr(13)+'│'+xm+'│'+ch+'│'+je+'│'+znj+'│'+rq+'│'+sds+'│ ');
directprint(chr(10)+chr(13)+'├────┼─────┴─────┴─────┴─────┴─────┤ ');
directPrint(chr(10)+chr(13)+'│金额大写│'+jedx+'│ ');
directprint(chr(10)+chr(13)+'└────┴─────────────────────────────┘ ');
directprint(chr(10)+chr(13)+' 操作员:'+form2.Edit1.Text+' ');
// directprint(chr(28)+chr(101)+chr(0)+chr(0));
Printer.EndDoc;
end;

这是我以前写的一段程序(控制码是针对STAR 系列的,如果用别的控制码,做相应替换就行
了,由于当时工期短,代码写得很不灵活。
至于strtostr 是我写的限定 字符 长度的函数,不是核心代码。
 
有相关源码者,请给一份,多谢了!
zhangguoxuemeng@263.net
 
关注LID=535869
 
to lyfwz 请问 TPassThroughData是在那声明的
 
to :lyfwz
lyfwz的代码没有解决打印机的分辩率的问题,我这里有,谁要呀
 
to lyfwz我需要,谢谢!!
zcm1975117@21cn.com
 
有相关源码的,能否也给我一份?先谢谢各位大侠了!要分尽管开口!!!
email:yyzhihua@21cn.com
 
大吓们,请给我ehlib,QR,FR控件的代码及说明好吗,可以得到500分!谢谢各位大吓!
小弟的EMAIL:FJJGC@163.net
 
有相关源码,请给一份,多谢了!
simonzg@yahoo.com
 
有相关源码的,能否也给我一份?先谢谢各位大侠了!我一定给分的。
email:LBTDR@21cn.com
 
后退
顶部