|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近这个打印大数据问题让人很头疼,文件为几个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
复制代码
|
|