寻找平推打印机高手!!!发控制码让打印机换页?再加200分!!!急!!! (200分)

  • 主题发起人 主题发起人 jammi
  • 开始时间 开始时间
J

jammi

Unregistered / Unconfirmed
GUEST, unregistred user!
用平推式打印机打印卡片,每打完一张后,要求卡片能自动换页。
在DOS下是利用送???chr(12)命令给打印机实现这一功能的,windows下如何实现?
Printer.Orientation:=poLandscape;
SetPaperSize(700,900);
Printer.begin
Doc;
DrawPrint(10,'宋体',10,10,DM.QPerson.FieldByName('postnum').asstring);
。。。
finally
Printer.EndDoc;
通过设置卡片大小不可能实现,因为卡片大小不很精确。
设小了,打印完后,打印机不换页。大了,换页后,windows提示还有打印任务未完成。
请教各位打印高手如何解决这个问题?
 
用TPrinter.NewPage;
 
printer.newpage;
 
加在begin
doc 和 enddoc 之间的话,出现windows提示打印任务未完成。
加在以外则不行,各位试试看。
 
照我下面的代码可以正常分页,我想会不会是你的程序中有别的地方控制了打印机.
DrawPrint这个函数似乎Delphi中没有,是你自己写的吗?你可以测试一下我的代码,若没有
问题,便应该是你的代码中哪儿有问题了.

procedure TForm1.Button4Click(Sender: TObject);
var i:integer;
begin

printer.begin
Doc;
for i:=1 to 2do

begin

printer.Canvas.TextOut(50,50,'The Test Page:'+IntToStr(i));
printer.NewPage;
end;

printer.EndDoc;
end;
 
to zhangkan:
象你的情况,打印完第二页后,windows提示打印任务未完成确认重试还是取消?
因为又开始了新的一页。
我的意思是,我打印一张卡片,打完了后,向打印机发一个出纸的控制码
类似foxpro+ucdos的???chr(12)命令。卡片退出来就完了。

 
我的显示都正常呀,是正常打完了.当然也不会提示打印未完成什么的.你用上面的代码有这
问题吗?那应该说明是你的打印机是不是有问题哟.打印机打完了纸后是自动出纸,不是你发
代码给它.当然,应该也有这么一种控制方法,你可以找一本打印机的说明书,上面就应该讲
得有.我记得以前就看到过,不过这会儿身边没有说明书.
你用你的打印机用上面的代码有问题吗?
 
delphi5开发人员指南
中有关于打印的详细介绍。
 
试试:
var
MyFile: TextFile;
begin

AssignPrn(MyFile);
Rewrite(MyFile);
Write(MyFile, #27#12);
System.CloseFile(MyFile);
end;
 
var
F: TextFile;

begin

AssignFile(F, 'LPT1');

Rewrite(F);

Write(F,chr(27)+ chr(12);

CloseFile(F);

end;


 
to zhangkan:首先感谢你的帮助!
我在OKI5530上试,打印完后卡片继续向前,在打印机后端出来,然后打印机提示缺纸,
98出提示。
在DPK8400E上试,打印完后出纸正常,98也没有提示,但是在继续打印第二张卡片时打印
内容前先向前走一段纸再打印。估计是NEWPAGE命令的延续。
to huzzz:首先感谢你的帮助!
我也按你的代码试过,没什么反应。我看过OKI5530的说明书,换页的控制码是chr(12)
而不是chr(27)+chr(12)
希望各位再给予帮助,这个问题困扰我已近一年,分数不够可以再加!
 
哦,我试的只是一般的喷墨打印机,恐怕帮不上你了.
看来恐怕是你那种打印机的问题,是不是两种打印机之前有所不同?你看看需不需要设置一下
你打印机的问题.我想恐怕是纸张大小设定不正确,你仔细看看说明书怎么设定,自己再调试
代码好好控制纸张大小.先可以在别的应用程序中试,如WORD等等,若这些程序打印正常了,再
记下它的设置内容,换到自己的程序中来试.也看看说明书,看上面有没有讲到一些注意事项.
设置纸张大小是一个麻烦的事情,只有自己慢慢调试了.
 
huzzz的方法应该可行啊。

AssignFile(F, 'LPT1');
// 打开打印端口
Rewrite(F);
/// 初始化打印机
InitStr := #27#36#64#27#107#27#53;
{ 汉字方式,设置SHIFT JIS方式,设置页顶位置 }
Write(F,InitStr) ;
/// 初始化结束
Write(F,#12);

CloseFile(F);


当然,要确定你的打印机连接在LPT1口。

我最近也在写这部分代码,我们可以多多交流
 
to darkkiss:
你用的是平推式的打印机吗?
 
还是我来告诉你!这几天我就在干这!
使用RAW方式打印。darkiss兄的方法可以完成,但不稳定,也不灵活。

我现在正在编写的程序就是在线监测程序,程序一边采集电流、电压信号
一边动态打印出曲线,3分钟打印1Cm长。
 
to Block_K_E:能否详细点?我的打印机是OKI5530
各位打印高手有兴趣的话关注我的另一个打印问题(200分)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=754251
 
我想用DOS方式发换页符的思路不通, Windows里对打印都是整页进行处理。
还是想想改变打印纸大小的方法吧。
以上只是我的想象, 如果不对请多多包涵。
 
to jammi:
一般来说,平推/票据打印机的指令至少有两字节(会有一个前导符如#27),你如
果100%确定是只有一个CHAR(12),以上代码又不行,那我可就没招了。
 
你光查资料不行,拿万用表和TC来测一下。祝好运。
 
to jammi:
查了一下,/f CHAR(12)是标准的“换页”控制码。没招了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部