Windows Python 代码无法在 Linux Debian 上运行

Windows Python Code not working on Linux Debian

该代码生成一个 QR 码并打印它,但由于不支持导入的库(win32print、Win32ui),它无法在 Debian Os 上运行。 谁能告诉我如何在不更改整个代码的情况下在 Debian 上 运行 它。


from random import randint
import win32print
import win32ui

from PIL import Image, ImageWin
from PIL._imaging import font
from PIL import ImageFont
from PIL import ImageDraw



    HORZRES = 8
    VERTRES = 10

   LOGPIXELSX = 88
   LOGPIXELSY = 90

   PHYSICALWIDTH = 110
   PHYSICALHEIGHT = 111


   PHYSICALOFFSETX = 112
   PHYSICALOFFSETY = 113


__author__ = 'masoodhussain'

import qrcode
import subprocess
import os

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)

qr.add_data('Masooddkjfdlfs,kokdfds sddshfhkjshfljsdhkjfdrtyyhtfhfghgh3')
qr.make(fit=True)

"subprocess.call(['lp', 'foo.png'])"

printer_name = win32print.GetDefaultPrinter()

img = qr.make_image()

img.show()

random_number= randint(0,10000)

img.save('label_'+str(random_number)+'.png')

file_name = 'label_'+str(random_number)+'.png'

print(file_name)


hDC = win32ui.CreateDC ()
hDC.CreatePrinterDC (printer_name)
printable_area = hDC.GetDeviceCaps (HORZRES), hDC.GetDeviceCaps (VERTRES)
printer_size = hDC.GetDeviceCaps (PHYSICALWIDTH), hDC.GetDeviceCaps (PHYSICALHEIGHT)
printer_margins = hDC.GetDeviceCaps (PHYSICALOFFSETX), hDC.GetDeviceCaps (PHYSICALOFFSETY)


bmp = Image.open (file_name)


if bmp.size[0] > bmp.size[1]:
  bmp = bmp.rotate (90)

ratios = [1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1]]
scale = min (ratios)


hDC.StartDoc (file_name)
hDC.StartPage ()

dib = ImageWin.Dib (bmp)
scaled_width, scaled_height = [int (scale * i) for i in bmp.size]
x1 = int ((printer_size[0] - scaled_width) / 2)
y1 = int ((printer_size[1] - scaled_height) / 2)
x2 = x1 + scaled_width
y2 = y1 + scaled_height
dib.draw (hDC.GetHandleOutput (), (x1, y1, x2, y2))

hDC.EndPage ()
hDC.EndDoc ()
hDC.DeleteDC ()

当我 运行 通过删除不受支持的库来编写代码时,它会在这部分出现错误:错误导入

import qrcode

我正在尝试导入整个文件夹以便使用其他文件。在 Windows 它运行完美。任何帮助都是 appreciated.Thanks

即使您安装了 qrcode,由于 Windows 特定的库,您的代码仍然会失败。您需要检查您正在使用哪个系统,最好将整个打印功能放在一个单独的功能中。
以下是一些有用的链接: and https://pypi.python.org/pypi/pycups

import platform

if platform.system() = 'Linux':
    import libcups
elif platform.system() = 'Windows':
    import win32print
    import win32ui
else:
    print('Unsupported OS. Exiting....')
    sys.exit(1)

def my_printer_function():
    if platform.system() = 'Linux':
        #now call the Linux printer
    elif platform.system() = 'Windows':
        #use your old Windows code

此代码等同于问题中发布的代码。

from random import randint
import cups

from PIL import Image, ImageWin
from PIL._imaging import font
from PIL import ImageFont
from PIL import ImageDraw


__author__ = 'masoodhussain'

import qrcode

qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=5,
    border=2,
)

qr.add_data('localhost:5070productinfo')
qr.make(fit=True)

conn= cups.Connection()
printer_name = conn.getPrinters()

printer_name = printer_name.keys()[0]

printqueuelength = len(conn.getJobs())

img = qr.make_image()

img.show()

random_number= randint(0,10000)

img.save('label_'+str(random_number)+'.png')

file_name = 'label_'+str(random_number)+'.png'

print(file_name)

conn.printFile(printer_name,file_name,"Hello", options ={'media':'25x25mm'}) 

重要的部分是安装所需的库并将媒体更改为所需的大小。