请教一个大文件分多次打印到打印机
最近这个打印大数据问题让人很头疼,文件为几个G的打印机数据文件,如果一次性读取写入打印机,内存就会溢出,我分成8MB左右的大小进行读取和打印,读取操作都是正常的,但就是打印到打印机后就变成若干个8mb左右的文件,正常打印到打印机的大小应该是和原文件大小差不多的数据,求高手指点一下。另外,咱们python有没有办法直接从TCP端口获取打印机数据的功能呢?比如我的打印机驱动端口是TCP的,IP为127.0.0.1,而端口号可以随意取,在易语言里有从服务器取回数据的功能,我在百度查找了很久,只有TCP客户端和服务端之间传送文件,而不能直接从打印机驱动的TCP端口取回数据,有知道的也麻烦指点一下,谢谢
下面是我写的代码
import os
import win32print
with open(r'd:\big_data.spl', 'rb') as f:
while True:
block = f.read(1024*8000)
if len(block)!=0:
printer_name=win32print.GetDefaultPrinter ()
hPrinter = win32print.OpenPrinter (printer_name)
hJob = win32print.StartDocPrinter (hPrinter, 1, ('Print test', None, "RAW"))
win32print.StartPagePrinter (hPrinter)
win32print.WritePrinter (hPrinter, block)
else:
win32print.EndPagePrinter (hPrinter)
win32print.ClosePrinter (hPrinter)
break
本帖最后由 jackz007 于 2021-11-27 14:22 编辑
只有与 block 直接相关的打印语句才有必要进循环
import os
import win32print
printer_name=win32print.GetDefaultPrinter ()
hPrinter = win32print.OpenPrinter (printer_name)
hJob = win32print.StartDocPrinter (hPrinter, 1, ('Print test', None, "RAW"))
win32print.StartPagePrinter (hPrinter)
with open(r'd:\big_data.spl', 'rb') as f:
while True:
block = f.read(1024*8000)
if len(block)!=0:
win32print.WritePrinter (hPrinter, block)
else:
win32print.EndPagePrinter (hPrinter)
win32print.ClosePrinter (hPrinter)
break jackz007 发表于 2021-11-27 14:21
只有与 block 直接相关的打印语句才有必要进循环
高手出手果然历害,太感谢了{:5_110:} cxnet 发表于 2021-11-27 14:28
高手出手果然历害,太感谢了
如果问题已经解决,应该设置 "最佳答案"。 jackz007 发表于 2021-11-27 14:32
如果问题已经解决,应该设置 "最佳答案"。
已经设置好了,关于从TCP打印机端口获取数据的问题你知道吗? cxnet 发表于 2021-11-27 14:36
已经设置好了,关于从TCP打印机端口获取数据的问题你知道吗?
没有任何意义,即便你能截取,截取到的也是已经被驱动程序规划好的的打印机指令流,对于我们这样的普通用户,不会有什么实际意义的。 jackz007 发表于 2021-11-27 14:45
没有任何意义,即便你能截取,截取到的也是已经被驱动程序规划好的的打印机指令流,对于我们这样 ...
我是要将原驱动打印出来的数据进行修改后再打印,目前没有好的办法我只有把打印机端口设置为保存为固定文件,然后程序再读取文件进行修改打印,但这样有个问题就是打印机端口保存的文件名是固定的,如果连续打印两个文件到打印机端口,前面的文件内容就被后面的内容给复盖了,所以才想通过TCP端口来读取数据这样就可以连续打印文件不怕被复盖 cxnet 发表于 2021-11-27 14:52
我是要将原驱动打印出来的数据进行修改后再打印,目前没有好的办法我只有把打印机端口设置为保存为固定文 ...
事实上,你根本就无法读懂打印指令,怎么谈得上修改?而且,即便能修改,可是,打印必须得通过电脑吧,你无法避开驱动程序的干预,所以,你的修改未必可以凑效。 "打印端口文件" 是个什么东东?难道你的电脑不是通过网络直接驱动打印机,而是向打印服务器发打印作业?即便是发打印作业,一个作业在没有结束的时候,后面的作业会自动等待,而且,作业文件是断不可能被意外覆盖的,要不,还怎么敢叫 "电脑" 呢? jackz007 发表于 2021-11-27 15:06
事实上,你根本就无法读懂打印指令,怎么谈得上修改?而且,即便能修改,可是,打印必须得通过电 ...
我是固定在数据后面增加一个尾巴而已,不用修改太多东西,我目前是可以修改的,也是没问题的,就差一个从TCP端口获取数据的方法了,呵呵 cxnet 发表于 2021-11-27 15:13
我是固定在数据后面增加一个尾巴而已,不用修改太多东西,我目前是可以修改的,也是没问题的,就差一个从 ...
既然你可以得到端口文件,十有八九,就是从 TCP 接收到的原始数据。 我不懂什么 TCP 抱歉!
页:
[1]