能否控制打印机每次只打印若干行,且不再继续走纸?(80分)

  • 主题发起人 主题发起人 victor
  • 开始时间 开始时间
V

victor

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现的效果是打印机每次只打印一行,
或多行(行数随机设定),且打印机不打时,
不走纸(不把一页走完!),这样打印的
内容在打印纸上看起来就是连续的。
我用printer.begin
doc 和printer.enddoc
发现每次打印一行,它也把一页纸走完。


现谢了.
 
用Tprinter没法子实现, 因为Windows是按照页来排版后输出的. 必须用直接端口
输出, 不过我不会.
 
可能调用API能实现,每次发送一行?
我没试过。
 
把一页的高度就设为这某几行的高度. 除此之外只有直接控制打印机了.
 
Another_eYes:
请问如何控制打印机直接输出打印?
 
用createfile打开并口, 然后按照打印机的esc命令集把您需要输出的文本转换成打印机控制符
发送到并口.(eYes很讨厌这种方法)
 
好象只有针打能只打一行吧?激光不能的。
实际上,如果你写过BASIC控制打印机的程序,这不难的,一样传那些东西。
 
用createfile打开并口 的方法不能用, 因为windows会捕获这个输出. 将
输出排版到一个页面, 输出还是一页页的输出.
 
把打印机的纸张设为自定义,然后在
程序里可以任意定义页高,但对喷墨和
激打好象不管用。
 
针打也有限制(好象最小为8cm, LQ1600K)
 
Seasky:那么用直接写断口的构件应该可以吧
eYes:不错了,还要小呀?
 
eYes:see怎么上不去?
 
请继续........
 
对文件操作(把文件名设为LPT1或LPT2,等设备文件), 然后按照打印机的esc命令集把您需要输出的文本转换成打印机控制符写到文件内,关闭文件就可以了。很好用的。

注意事项:
1.打印使用打印机自带字库,要打中文必须使用带中文字库的打印机(LQ1600等)
2.在激光打印机上因为激光打印机有自己的页缓冲,只有一页才向外输出,再不满 一页的时候可以发换页命令(0x12)
3.激光打印机不带中文字库
4.文件名是否可以用(//机器名/打印机名)我没有试过,不知是否好使。
5.当把网络打印机映射到LPT1(LPT2...)对于HP6L激光打印机不好使,并会使HP6L激光打印机停止工作,只有安装打印机的机器重新启动在好使。对于其他打印机不知如何情况,如有试验请告知。
 
操作TPrinter对象,它比较灵活。
参看我在'怎样控制打印?'这个问题中的发言,ID:140952。
好象还可以用Write、Writeln语句来向打印机输出(当然要指定输出设备),不过我记
不清楚了,不太确定。
 
哈哈,半年前的帖子,今天才让俺发现 :)
用GDI函数直接操作打印机,建一个自己的类:
type Tmyprinter=class(Tprinter)
public
dc:HDC;
procedure startprint;//获得打印机状态,填充DOCINFO....
procedure endprint;//enddoc
procedure write;//调用ESCAPE函数,使用转义字符passthrough直接
操作打印机...
procedure writeln//向打印机发ASCII字符#13#10
delphi的API帮助中指出passthrough是‘废弃的'(obsolete),但我试了一下还可以。
 
就是控制纸张的问题。
首先
[
如果你是使用通常的纸张,我想是没有问题的。
关键的问题是使用自定义的纸张。最简单的办法是(这可是一个秘诀哟!):你用尺子
量出你的打印纸大小(如果是较精密的票据则应量出数张(>10)的长度求平均长度)。放
置的位置可以是设计时定义。也可以运行时定义,就看你的爱好了!
]
其次是设定页面的页边距。要连续的话。越小越好。
我用这个办法解决了连续的医院发票的打印问题。应该可以解决你的问题的。
 
多人接受答案了。
 

Similar threads

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