玩家必看科普!麻豆人人妻人人妻人人片AV,欧美老妇交乱视频在线观看,久久综合九色综合久99_知乎
<ruby id="fgcka"></ruby>
  • <progress id="fgcka"></progress>
    <tbody id="fgcka"></tbody>
    <dd id="fgcka"></dd>

    1. <dd id="fgcka"></dd>

      <em id="fgcka"></em>
        1. 系統城裝機大師 - 唯一官網:www.nowordz.com!

          當前位置:首頁 > 腳本中心 > python > 詳細頁面

          python連接打印機實現打印文檔、圖片、pdf文件等功能

          時間:2020-02-09來源:系統城作者:電腦系統城

          引言

          python連接打印機進行打印,可能根據需求的不同,使用不同的函數模塊。

          1. 如果你只是簡單的想打印文檔,比如office文檔,你可以使用ShellExecute方法,對于微軟office的文檔、pdf、txt等有用,你可以嘗試下;
          2. 如果你輸入某些數據,文字信息,就想直接把它發送給打印機打印,那么可以嘗試使用win32print;
          3. 如果你有一張圖片,那么你可以結合python的Python Imaging Library(PIL)win32ui模塊進行打??;

          普通打印

          ShellExecute

          • 首先確保你電腦中的應用可以打開你要打印的文件;
          • 是一些標準的文件類型
          • 不用管哪些打印機,也就是說和連接的打印機型號無關;
          • 你無控制設置打印屬性的權限;
          
           
          1. import tempfile
          2. import win32api
          3. import win32print
          4.  
          5. filename = tempfile.mktemp (".txt")
          6. open (filename, "w").write ("This is a test")
          7. win32api.ShellExecute (
          8. 0,
          9. "print",
          10. filename,
          11. #
          12. # If this is None, the default printer will
          13. # be used anyway.
          14. #
          15. '/d:"%s"' % win32print.GetDefaultPrinter (),
          16. ".",
          17. 0
          18. )

          另一個版本

          
           
          1. import tempfile
          2. import win32api
          3. import win32print
          4.  
          5. filename = tempfile.mktemp (".txt")
          6. open (filename, "w").write ("This is a test")
          7. win32api.ShellExecute (
          8. 0,
          9. "printto",
          10. filename,
          11. '"%s"' % win32print.GetDefaultPrinter (),
          12. ".",
          13. 0
          14. )

          直接打印數據

          win32print

          • 直接將數據扔給打印機;
          • 快速而且容易;
          • 而且可以定義選擇哪個打印機打??;
          • 但是要打印的數據必須是可打印的,例如字符串等;
          
           
          1. import os, sys
          2. import win32print
          3. printer_name = win32print.GetDefaultPrinter ()
          4. #
          5. # raw_data could equally be raw PCL/PS read from
          6. # some print-to-file operation
          7. #
          8. if sys.version_info >= (3,):
          9. raw_data = bytes ("This is a test", "utf-8")
          10. else:
          11. raw_data = "This is a test"
          12.  
          13. hPrinter = win32print.OpenPrinter (printer_name)
          14. try:
          15. hJob = win32print.StartDocPrinter (hPrinter, 1, ("test of raw data", None, "RAW"))
          16. try:
          17. win32print.StartPagePrinter (hPrinter)
          18. win32print.WritePrinter (hPrinter, raw_data)
          19. win32print.EndPagePrinter (hPrinter)
          20. finally:
          21. win32print.EndDocPrinter (hPrinter)
          22. finally:
          23. win32print.ClosePrinter (hPrinter)

          打印圖片

          PIL win32ui

          不使用額外的工具,在windows電腦上打印一張圖片是相當的困難,至少需要3種不同的且相關的設備環境才可以。
          還好,device-independent bitmap(DIB)和PIL可以幫助我們快速打印。下面的代碼可以將圖片發送至打印機打印盡可能大的尺寸且不失比例。

          • 還可以選擇使用哪個打印機
          • 選擇加載的圖片的格式等
          • 但是如果你電腦不是windows,那可能不是最好的方法;
          
           
          1. import win32print
          2. import win32ui
          3. from PIL import Image, ImageWin
          4.  
          5. #
          6. # Constants for GetDeviceCaps
          7. #
          8. #
          9. # HORZRES / VERTRES = printable area
          10. #
          11. HORZRES = 8
          12. VERTRES = 10
          13. #
          14. # LOGPIXELS = dots per inch
          15. #
          16. LOGPIXELSX = 88
          17. LOGPIXELSY = 90
          18. #
          19. # PHYSICALWIDTH/HEIGHT = total area
          20. #
          21. PHYSICALWIDTH = 110
          22. PHYSICALHEIGHT = 111
          23. #
          24. # PHYSICALOFFSETX/Y = left / top margin
          25. #
          26. PHYSICALOFFSETX = 112
          27. PHYSICALOFFSETY = 113
          28.  
          29. printer_name = win32print.GetDefaultPrinter ()
          30. file_name = "test.jpg"
          31.  
          32. #
          33. # You can only write a Device-independent bitmap
          34. # directly to a Windows device context; therefore
          35. # we need (for ease) to use the Python Imaging
          36. # Library to manipulate the image.
          37. #
          38. # Create a device context from a named printer
          39. # and assess the printable size of the paper.
          40. #
          41. hDC = win32ui.CreateDC ()
          42. hDC.CreatePrinterDC (printer_name)
          43. printable_area = hDC.GetDeviceCaps (HORZRES), hDC.GetDeviceCaps (VERTRES)
          44. printer_size = hDC.GetDeviceCaps (PHYSICALWIDTH), hDC.GetDeviceCaps(PHYSICALHEIGHT)
          45. printer_margins = hDC.GetDeviceCaps (PHYSICALOFFSETX), hDC.GetDeviceCaps(PHYSICALOFFSETY)
          46.  
          47. #
          48. # Open the image, rotate it if it's wider than
          49. # it is high, and work out how much to multiply
          50. # each pixel by to get it as big as possible on
          51. # the page without distorting.
          52. #
          53. bmp = Image.open (file_name)
          54. if bmp.size[0] > bmp.size[1]:
          55. bmp = bmp.rotate (90)
          56.  
          57. ratios = [1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1]]
          58. scale = min (ratios)
          59.  
          60. #
          61. # Start the print job, and draw the bitmap to
          62. # the printer device at the scaled size.
          63. #
          64. hDC.StartDoc (file_name)
          65. hDC.StartPage ()
          66.  
          67. dib = ImageWin.Dib (bmp)
          68. scaled_width, scaled_height = [int (scale * i) for i in bmp.size]
          69. x1 = int ((printer_size[0] - scaled_width) / 2)
          70. y1 = int ((printer_size[1] - scaled_height) / 2)
          71. x2 = x1 + scaled_width
          72. y2 = y1 + scaled_height
          73. dib.draw (hDC.GetHandleOutput (), (x1, y1, x2, y2))
          74.  
          75. hDC.EndPage ()
          76. hDC.EndDoc ()
          77. hDC.DeleteDC ()

          實踐

          從前臺傳來要打印的字符,后端生成二維碼,并作出相應處理后,連接打印機打印圖片。

          
           
          1. # 打印二維碼
          2. def print_barcode(request):
          3. import pyqrcode
          4. import random,string
          5. from PIL import Image,ImageDraw,ImageFont
          6. import numpy as np
          7. if request.is_ajax() and request.method == 'POST':
          8. result = {}
          9. bar_string = 'NaN'
          10. type = request.POST['type']
          11.  
          12. if type == 'box':
          13. # 生成箱子碼
          14. # 格式:P190823-K91 [P][日期][-][A-Z][0-9][0-9]
          15. bar_string = 'P'+datetime.date.today().strftime('%y%m%d')+'-'+str(random.choice('ABCDEFGHIGKLMNOPQRSTUVWXYZ'))\
          16. + str(random.choice(range(10)))+ str(random.choice(range(10)))
          17. elif type == 'kuwei':
          18. # 生成庫位碼
          19. bar_string = request.POST['string']
          20. else:
          21. pass
          22.  
          23. try:
          24. big_code = pyqrcode.create(bar_string, error='L', version=2 , mode='binary')
          25. big_code.png('./code.png', scale=8)
          26. img_code = Image.open('code.png')
          27.  
          28. size = img_code.size
          29. img_final = Image.new('RGB', (size[0], size[1]+35), color=(255, 255, 255))
          30. img_final.paste(img_code, (0, 0, size[0], size[1]))
          31.  
          32. draw = ImageDraw.Draw(img_final)
          33. font = ImageFont.truetype('AdobeGothicStd-Bold.otf', size=35)
          34. width, height = draw.textsize(bar_string,font=font)
          35. draw.text(((size[0]-width)/2, size[1]-15), bar_string , fill=(0, 0, 0), font=font)
          36. img_final.save('./code.png')
          37.  
          38. # 然后連接打印機將其打印出來即可
          39. is_ok =[]
          40. if type == 'box':
          41. for i in range(4):
          42. temp = print_img('./code.png')
          43. is_ok.append(temp)
          44. else:
          45. temp = print_img('./code.png')
          46. is_ok.append(temp)
          47. # is_ok = True
          48. result['done'] = 'ok' if np.all(is_ok) else '連接打印機失敗'
          49. except Exception as e:
          50. result['done'] = e
          51.  
          52. return JsonResponse(result)
          53.  
          54. def print_img(img):
          55. import win32print
          56. import win32ui
          57. from PIL import Image, ImageWin
          58. # 參考 http://timgolden.me.uk/python/win32_how_do_i/print.html#win32print
          59. try:
          60. printer_name = win32print.GetDefaultPrinter()
          61. hDC = win32ui.CreateDC()
          62. hDC.CreatePrinterDC(printer_name)
          63.  
          64. #printable_area = (300, 270) # 打印紙尺寸
          65. #printer_size = (300, 270)
          66.  
          67. # 打開圖片并縮放
          68. bmp = Image.open(img)
          69. if bmp.size[0] < bmp.size[1]:
          70. bmp = bmp.rotate(90)
          71.  
          72. # ratios = [1.0 * printable_area[0] / bmp.size[1], 1.0 * printable_area[1] / bmp.size[0]]
          73. # scale = min(ratios)
          74. scale = 1
          75.  
          76. hDC.StartDoc(img)
          77. hDC.StartPage()
          78.  
          79. dib = ImageWin.Dib(bmp)
          80. scaled_width, scaled_height = [int(scale * i) for i in bmp.size]
          81.  
          82. x1 = 20 # 控制位置
          83. y1 = -30
          84. x2 = x1 + scaled_width
          85. y2 = y1 + scaled_height
          86. dib.draw(hDC.GetHandleOutput(), (x1, y1, x2, y2))
          87.  
          88. hDC.EndPage()
          89. hDC.EndDoc()
          90. hDC.DeleteDC()
          91.  
          92. return True
          93. except:
          94. return False

          打印效果:

          python連接打印機實現打印文檔、圖片、pdf文件等功能

          以上內容為二賽君整理發布,轉載請注明出處,謝謝。

          參考

          分享到:

          相關信息

          系統教程欄目

          欄目熱門教程

          人氣教程排行

          站長推薦

          熱門系統下載

          玩家必看科普!麻豆人人妻人人妻人人片AV,欧美老妇交乱视频在线观看,久久综合九色综合久99_知乎 人人玩人人添人人澡超碰偷拍 青春娱乐视频精品分类官网2 最好最新高清中文字幕 91国自产拍最新2018 欧美精品一区二区三区不卡网 深夜你懂得我的意思2021 宿舍NP乖把腿张开H 网恋奔现一天被要几次 为什么我越叫他越快 学渣各种各样的PLAY 英语课代表下面好软小说 亚洲国产综合在线区尤物 FREE性丰满HD性欧美 我年轻漂亮的继坶BD 最近中文字幕完整免费视频 啦啦啦免费视频卡一卡二 青柠视频在线观看大全 在线天堂WWW在线资源 亚洲国产日本韩国欧美MV 天天学习|久久久久久久精品国产亚洲87 国产K频道分享系统进入口 三个嘴都吃满了还塞满了 JAPONENSIS老师学生JAVAHBB 亚洲精品1卡2卡3卡4卡 樱花草在线社区WWW韩国 好涨水快流出来了快吃动视频 久久AV无码精品人妻出轨