在Python中将文本文件打印到指定打印机

3
我想使用Python将文本文件打印到本地打印机(名称:“XP-58”,类型:热敏POS打印机,操作系统:Windows 8.1)。最佳方法是什么?我找到了这个,但我找不到方法去做。一个最优的解决方案可能是这样的:
  1. currentprinter = X
  2. tempprinter = "XP-58"
  3. 打开文件“test.txt”
  4. 打印到临时打印机
  5. 将打印机设置为当前打印机
额外的问题:你认为是否可能打印条形码?(不同字体?)
我试图使用上面链接中的原始打印功能,将其更改为函数,但我在打印机上没有得到任何东西。这是我的代码:
import os, sys
import win32print

printer_name = win32print.GetDefaultPrinter ()
hPrinter = win32print.OpenPrinter (printer_name)

def prn_txt(text):
    if sys.version_info >= (3,):
      raw_data = bytes (text, "utf-8")
    else:
      raw_data = text
    try:
      hJob = win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW"))
      try:
        win32print.StartPagePrinter (hPrinter)
        win32print.WritePrinter (hPrinter, raw_data)
        win32print.EndPagePrinter (hPrinter)
      finally:
        win32print.EndDocPrinter (hPrinter)
    finally:
      win32print.ClosePrinter (hPrinter)

txt = "blabla"
print prn_txt(txt)

但是什么也没有发生?我做错了什么?


针对条形码 - khajvah
1
打印基础设施在不同的系统和平台之间存在巨大差异。根据您提供的链接,显示为Windows系统,因此我已经根据此标记了您的问题;但请随时更新您的问题,提供有关您的平台和环境的详细信息。 - tripleee
完成了。我忘了提到这一点。抱歉。 - Yannis
3个回答

2

如果要通过打印池API向打印机发送文本,您需要使用TEXT模式而不是RAW

hJob = win32print.StartDocPrinter (hPrinter, 1, ("Test text document", None, "TEXT"))

RAW模式适用于打印机可以直接处理PCL或Postscript等数据的情况。使用TEXT模式将导致拖印程序生成一个使用打印机理解的语言的溢出文件,然后将其发送到打印机。


0

如何在Python中指定打印机来打印文本

import win32print
import win32ui

x = 0
y = 50
printer_name = "EPSON L382 Series (копия 1)"
# if your printer is standard, replace the printer_name:
# win32print.GetDefaultPrinter()

fd = open("file.txt", "r", encoding = "utf-8")
input_string = fd.read()
multi_line_string = input_string.splitlines()

hDC = win32ui.CreateDC()
hDC.CreatePrinterDC()
hDC.StartDoc("Printing...")
hDC.StartPage()
for line in multi_line_string:
hDC.TextOut(x, y, line)
y+=50
hDC.EndPage()
hDC.EndDoc()
fd.close()

哪些行应该在 for 循环内部,哪些应该在外部?请 [编辑] 并修复缩进。 - Karl Knechtel

-1

你需要将最后一行代码从 print prn_txt(txt) 改为 prn_txt(txt)

print命令是写入控制台的,与打印机无关

注释: win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW")) 是正确的,因为“test of raw data”只是在Windows打印机控制台中显示的打印作业名称。


虽然在 Python 2.x 代码中 print 语句并不是很有用,但它肯定不会导致所报告的问题。print prn_txt(txt) 会先执行 prn_txt(txt) 函数(假设函数成功返回),然后打印结果(None)。 - Karl Knechtel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接