想不出...想不出...(关于套打的问题)(100分)

  • 主题发起人 主题发起人 老莫
  • 开始时间 开始时间

老莫

Unregistered / Unconfirmed
GUEST, unregistred user!
我要套打一份单据,使用以下的代码:
showmessage('请放入收据联,按确认键开始打印');
try
printer.begin
Doc;
printer.Canvas.Font.Name:='宋体';
printer.Canvas.Font.Size:=11;
printer.canvas.TextOut(334,110,'jdbh');
printer.canvas.TextOut(618,110,'sgz');
printer.canvas.TextOut(950,110,'bh');
printer.canvas.TextOut(189,170,'xm');
printer.canvas.TextOut(806,170,'zds');
printer.canvas.TextOut(189,211,'zz');
printer.canvas.TextOut(756,211,'dw');
printer.canvas.TextOut(1088,278,'ho');
printer.canvas.TextOut(1088,332,'wo');
printer.canvas.TextOut(200,415,'trans(czf)');
printer.canvas.TextOut(920,415,'temp');
printer.canvas.TextOut(344,460,'fh');
printer.canvas.TextOut(586,460,'czy');
printer.canvas.TextOut(869,460,'rq');
finally
printer.enddoc;
end;

单据高度大概8公分
现在的问题是第一张打完后,打印作业没有结束,等第二张纸进去后先走纸5
公分左右。结果第二张单据就打偏了。
如何在最后一个textout完成后马上退纸呢?
我用的是NT、OKI5330打印机
 
加上printer.newpage;
 
我试过,加在enddoc的后面,结果是未完成的打印任务又1页变成了2页
 
printer.newpage是强行换纸
你应该在finally前加上printer.newpage;
 
www:好象没用,还是1页变两页
 
看一下纸的大小
printer.PageHeight
printer.PageWidth
是不是最后一句
printer.canvas.TextOut(869,460,'rq');
超出纸的范围了?
 
来晚了:-(
 
www:
printer.canvas.TextOut(869,460,'rq');
打出来了,在纸上。
pageheight和pagewidth好象为2000多和1000多,我想可能问题出在这儿。
不知道怎么改,这两个属性好象是只读的。

 
你看一下打印机设置中纸张的大小,把纸设大一些。
 
我量过了宽17.5公分,长8公分
 
最后一行打完之后再输出回车换行符,这样作业才会真正
结束。我也碰到过这样的问题,就是采用最后追加回车换
行的办法来解决的。似乎是系统没有收到回车换行就不向
打印机发送实际内容,所以也就结束不了。不知道是否适
用你这里的情况。
 
试一下printersetupdialog1.execute;
 
象你的这种情况,由于纸张大小固定,所以完全可以可以在系统的打印机设置中
设置自定义纸张大小.
如果要在程序里控制,可以调用Windows Api,调出设置对话框,设置效果和通过
系统设置一样,不象QuickReport那样没用.

var
printername: string;
printerhandle:tHANDLE;
printerdefaulta:pprinterdefaultsa;

if (OpenPrinter(pchar(printername), printerhandle,printerdefaulta ))
then
begin

PrinterProperties(handle,printerhandle);
end;


其中'printername'是打印机的名字,可设法通过Delphi的Printer对象取得.
 
showdeep:
我想你可能是用writeln做的,我这儿不方便用,所有的数据都要定位。
用canvas可能不能输出换行符。
charles:
你知不知道如何在程序中设定纸张大小?
 
还没解决吗??
要不你先不要来那么多的textout,少打几行看看行不行,再慢慢加上去,看看到底
是哪儿的毛病.
 
www:把后面六个textout去掉就没有问题。
中午去找了本书,上面有一段是讲直接向打印机发控制码的,我去试试。
 
你去http://www.zg169.net/~randolph/下载他的那个打印构件,你只需把那些
不要打的构件的Visiable属性改为不可见,既可,
 
>>charles:你知不知道如何在程序中设定纸张大小?
上面不是已经给出方法了吗? 可以调用系统打印机设置对话框,设置纸张大小.
<font color=red size="6">
PrinterProperties(handle,printerhandle);
<font></font></pre>
:(
 
我在NT上也碰到相似的问题。
即时我用NOTEPAD打印标准纸张(窄行纸)也会出现多走纸的现象。
建议将打印机移到WIN98上试一试。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
979
import
I
后退
顶部