如何让面向页面的打印机强制打印部分页面?
如何让面向页面的打印机强制打印部分页面?
太懂你这种折腾老DOS程序遇到打印机卡缓冲的糟心了!从MS-DOS那会儿开始,激光机、DeskJet这类面向页面的打印机就有个“特性”——要么缓冲区攒满一页,要么收到换页/结束打印的控制命令,才肯把内容打出来。你碰到的短内容打不出来、长内容后半段卡着的情况,就是因为命令行直接重定向输出时,没给打印机发这个“赶紧打印”的信号。
你之前试的^L(ASCII换页符,对应ASCII码12)其实是对的,但大概率是发送方式不对!下面给你两种当年解决这类问题的经典靠谱办法:
方法一:制作一个“强制打印触发文件”
先做一个只包含换页符的小文件,之后每次需要强制打印时,把这个文件的内容发送给打印机就行:
- 打开命令提示符,输入
copy con eop.txt回车(eop是End Of Print的缩写,名字随便起) - 按住Ctrl+L(屏幕会清屏,这是正常的,我们是把这个控制符写入文件)
- 按住Ctrl+Z后回车,完成文件创建(这个文件里就只有ASCII换页符)
- 之后打印内容时,在后面追加发送这个文件:
注意把dir > LPT1: && type eop.txt > LPT1:LPT1:换成你打印机实际用的端口(比如USB连接的话可能是USB001,去打印机属性的“端口”选项卡就能查到)
方法二:用系统自带的print命令替代直接重定向
Windows(包括XP)自带的print命令会自动在输出末尾添加换页符,完美解决缓冲问题:
- 打印单个文件:
print /d:你的打印机端口 yourfile.txt - 打印DOS程序的输出(用管道把程序输出传给
print):
比如你要打印目录,就用你的老DOS程序.exe | print /d:你的打印机端口dir | print /d:LPT1:,这样不管内容长短,打印机都会立刻输出。
为啥之前的^L没用?大概率是你直接在echo ^L > LPT1:里输入的^L不是真正的ASCII换页符——命令行里直接按Ctrl+L是清屏操作,而不是输入这个字符,用copy con的方法才能准确把换页符写入文件里。
备注:内容来源于stack exchange,提问作者techineer
相关产品推荐
相关产品推荐

