2016-05-01 10 views
0

コードはQRコードを生成して出力しますが、インポートされたライブラリ(win32print、Win32ui)をサポートしていないため、Debian Osでは動作しません。 コード全体を変更せずにDebianで実行する方法を教えてもらえますか?Windows PythonコードがLinuxで動作しない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では完全に動作していました。どんな助けもありがたいです。ありがとう

+0

まず、qrcodeがインストールされていることを確認する必要があります。あなたは気質から次のコマンドを実行することでこれを確認することができます: pip freeze | grep qrcode – Tom

答えて

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

重要な部分は、必要なライブラリをインストールし、メディアを必要なサイズに変更することです。

0

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 
+0

私は問題があります。私はpycupsを使用してコードを変換し、qrコードを印刷していますが、画像の一部だけを印刷しています。 conn.printFile(printer_name、file_name、 "Hello"、{'フィットするページ': 'True'})を試みましたが、結果は同じです –

+0

上記の最後の部分コードは画像を調整していましたが、この部分をすべて削除して画像を調整しないようにしました。 –

+0

は印刷された画像がページよりも大きいか、画像をページの間違った部分に配置していますか? –

関連する問題