Python接続プリンターで複数行を印刷

0. Pythonがプリンターに接続するには、win32printをインストールする必要があることを学び、公式Webサイトにアクセスしてhttps://github.com/mhammond/pywin32/releasesを確認します。

1.正しいバージョンのPythonを選択します。ダウンロードが成功すると、インストールパッケージが表示されます。[インストール]をクリックして、レジストリに見つからなかった必要なPythonバージョン3.5を表示します。

2.解決策は、register.pyという名前の新しいPythonスクリプトを作成することです。内容は次のとおりです。

import sys

from winreg import *

# tweak as necessary
version = sys.version[:3]
installpath = sys.prefix

regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
    installpath, installpath, installpath
)


def RegisterPy():
    try:
        reg = OpenKey(HKEY_CURRENT_USER, regpath)
    except EnvironmentError as e:
        try:
            reg = CreateKey(HKEY_CURRENT_USER, regpath)
            SetValue(reg, installkey, REG_SZ, installpath)
            SetValue(reg, pythonkey, REG_SZ, pythonpath)
            CloseKey(reg)
        except:
            print("*** Unable to register!")
            return
        print("--- Python", version, "is now registered!")
        return
    if (QueryValue(reg, installkey) == installpath and
                QueryValue(reg, pythonkey) == pythonpath):
        CloseKey(reg)
        print("=== Python", version, "is already registered!")
        return
    CloseKey(reg)
    print("*** Unable to register!")
    print("*** You probably have another Python installation!")


if __name__ == "__main__":
    RegisterPy()

それを実行して成功を示してください!次の一歩。

3.プリンターを接続します。1行を印刷する場合は、次のようにテキストをプリンターに直接送信できます。

import os, sys
import win32print
# coding=utf-8 
printer_name = win32print.GetDefaultPrinter ()

if sys.version_info >= (3,):
  raw_data =bytes ("This is a test", "utf-8")
else:
  raw_data = "This is a test"

hPrinter = win32print.OpenPrinter (printer_name)
try:
  hJob = win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW"))
  try:
    win32print.StartPagePrinter (hPrinter)
    win32print.WritePrinter (hPrinter, str_byte)
    # win32print.WritePrinter (hPrinter, raw_data+'hhh')
    win32print.EndPagePrinter (hPrinter)
  finally:
    win32print.EndDocPrinter (hPrinter)
finally:
  win32print.ClosePrinter (hPrinter)

電源を入れた後、プリンタが印刷できることを確認してください。これはほぼ結果です。

しかし、私の要件は複数行を印刷することなので、ループステートメントで文字を拡張しようとしました

import os, sys
import win32print
# coding=utf-8 
printer_name = win32print.GetDefaultPrinter ()
#
# raw_data could equally be raw PCL/PS read from
#  some print-to-file operation
#
# def get_Print(raw_data):
code_list=[1153000235,1153000236,1153000237]

if sys.version_info >= (3,):
  s_tp=''
  raw_data = "    computer\n    {}\n    it\n    lee\n"
  for co in code_list:
    # print(raw_data.format(co))
    s_tp=s_tp+raw_data.format(co)
  # print(s_tp)
  str_byte=bytes (s_tp, "utf-8")
  # print('this')
else:
  raw_data = "This is a test"

hPrinter = win32print.OpenPrinter (printer_name)
try:
  hJob = win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW"))
  try:
    win32print.StartPagePrinter (hPrinter)
    win32print.WritePrinter (hPrinter, str_byte)
    # win32print.WritePrinter (hPrinter, raw_data+'hhh')
    win32print.EndPagePrinter (hPrinter)
  finally:
    win32print.EndDocPrinter (hPrinter)
finally:
  win32print.ClosePrinter (hPrinter)

しかし、印刷された効果は

ここでの改行文字「\ n」の機能は、機能文字に対応する次の行に行を直接折り返すことであることがわかります。当初は、このように出力されると思っていました。

    computer
    1153000235
    it
    lee
    
    computer
    1153000236
    it
    lee

    computer
    1153000236
    it
    lee

しかし、実際には:

    computer
                1153000235
                              it
                                    lee
    
                                          computer
                                                      1153000236
                                                                    it
                                                                          lee

                                                                                computer
                                                                                            1153000236
                                                                                                          it
                                                                                                                lee

背中が広すぎるのでタイプしませんでした

APIに改行文字が見つかりませんでした。

そこで、別のアイデアを採用し、テキストをWord文書に送信してから、python-docxライブラリを使用して文書を印刷します。そうでない場合は、pipを使用して直接インストールできます。

# coding:utf-8
import win32print
import win32api
from docx import Document
from docx.shared import Inches

document = Document()

code_list=[1153000235,1153000236,1153000237]
for i in range(3):

    testName = "computer\n"+str(code_list[i])+"\n"+"IT\n"+"Lee"
    
    p_total = document.add_heading("", 2)
    r_total = p_total.add_run(testName)
    r_total.font.bold = True

    # document.add_picture(img_name, width=Inches(1.5))  # 向文档里添加图片

document.save("E:/test.docx")  # 保存文档
fn="E:/test.docx"
win32api.ShellExecute(0,'print',fn,win32print.GetDefaultPrinterW(),".",0)

これを得ました

ほぼこのようなものです。個人的には、文字を直接渡す方が便利だと思います。その方法については後で学習します。

おすすめ

転載: blog.csdn.net/baidu_36669549/article/details/106133885