【问题标题】:Windows Python Code not working on Linux DebianWindows Python 代码在 Linux Debian 上不起作用
【发布时间】:2016-05-01 16:01:09
【问题描述】:

代码生成二维码并打印出来,但由于不支持导入的库(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 中它运行良好。任何帮助将不胜感激。谢谢

【问题讨论】:

  • 首先你需要确保你已经安装了二维码。您可以通过从终端运行以下命令来检查这一点: pip freeze | grep 二维码

标签: python linux debian


【解决方案1】:

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

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'}) 

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

【讨论】:

    【解决方案2】:

    即使您安装了 qrcode,您的代码仍然会因为 Windows 特定库而失败。您需要检查您在哪个系统上工作,最好将整个打印功能放在一个单独的功能中。
    以下是一些有用的链接:https://stackoverflow.com/a/1857/2776376https://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
    

    【讨论】:

    • 我有问题。我已经使用 pycups 转换了代码,它正在打印 qr 代码,但它只打印图像的一部分。如何调整pycups中的图像,我试过 conn.printFile(printer_name,file_name,"Hello ", {'fit-to-page':'True'}) 但结果是一样的
    • 上面代码的最后一部分是调整图像,但现在我已经删除了所有这部分,所以它没有调整图像
    • 打印的图像是否比页面大,还是将图像放置在页面的错误部分?
    • 打印的图像比页面大。完整的二维码贴纸上仅印有 1/4 二维码
    • 从命令行调用cups时是否也会出现这种情况?您也可以尝试使用scaling=100
    猜你喜欢
    • 1970-01-01
    • 2014-05-12
    • 2015-10-15
    • 2019-10-08
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多