【问题标题】:Print a text file to a specific printer in Python在 Python 中将文本文件打印到特定的打印机
【发布时间】:2015-03-09 12:24:26
【问题描述】:

我想使用 python 将文本文件打印到本地打印机(名称:“XP-58”,类型:热敏 pos 打印机,操作系统:windows 8.1)。 最好的方法是什么? 我找到了this,但我找不到办法。 最佳解决方案是这样的:

  1. 当前打印机 = 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)

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

【问题讨论】:

  • 打印基础设施在系统和平台之间差异很大。您的链接指示 Windows,因此我已根据该链接标记了您的问题;但请随时使用有关您的平台和环境的详细信息更新您的问题。
  • 完成。我忘了提。对不起

标签: python windows printing


【解决方案1】:

要通过后台打印程序 API 将文本发送到打印机,您需要使用 TEXT 模式而不是 RAW

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

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

【讨论】:

    【解决方案2】:

    txt 在 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多