知行合一

恋結びの夏 私は、彼女

   :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 1 # -*- coding:utf-8 -*-
 2 # Author: Pete Yim<xpHook@gmail.com>
 3 # Date  : 13-8-22
 4 # Copyright (c) 2013 RCSH Systems Incorporated. All rights reserved.
 5 import win32print
 6 import win32ui
 7 from PIL import Image, ImageWin
 8 import _imaging
 9 
10 #
11 # Constants for GetDeviceCaps
12 #
13 #
14 # HORZRES / VERTRES = printable area
15 #
16 HORZRES = 8
17 VERTRES = 10
18 #
19 # LOGPIXELS = dots per inch
20 #
21 LOGPIXELSX = 88
22 LOGPIXELSY = 90
23 #
24 # PHYSICALWIDTH/HEIGHT = total area
25 #
26 PHYSICALWIDTH = 110
27 PHYSICALHEIGHT = 111
28 #
29 # PHYSICALOFFSETX/Y = left / top margin
30 #
31 PHYSICALOFFSETX = 112
32 PHYSICALOFFSETY = 113
33 
34 printer_name = win32print.GetDefaultPrinter ()
35 file_name = "E:\\abc.jpg"
36 
37 #
38 # You can only write a Device-independent bitmap
39 #  directly to a Windows device context; therefore
40 #  we need (for ease) to use the Python Imaging
41 #  Library to manipulate the image.
42 #
43 # Create a device context from a named printer
44 #  and assess the printable size of the paper.
45 #
46 hDC = win32ui.CreateDC ()
47 hDC.CreatePrinterDC (printer_name)
48 printable_area = hDC.GetDeviceCaps (HORZRES), hDC.GetDeviceCaps (VERTRES)
49 printer_size = hDC.GetDeviceCaps (PHYSICALWIDTH), hDC.GetDeviceCaps (PHYSICALHEIGHT)
50 printer_margins = hDC.GetDeviceCaps (PHYSICALOFFSETX), hDC.GetDeviceCaps (PHYSICALOFFSETY)
51 
52 #
53 # Open the image, rotate it if it's wider than
54 #  it is high, and work out how much to multiply
55 #  each pixel by to get it as big as possible on
56 #  the page without distorting.
57 #
58 bmp = Image.open (file_name)
59 if bmp.size[0] > bmp.size[1]:
60   bmp = bmp.rotate (90)
61 
62 ratios = [1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1]]
63 scale = min (ratios)
64 
65 #
66 # Start the print job, and draw the bitmap to
67 #  the printer device at the scaled size.
68 #
69 hDC.StartDoc (file_name)
70 hDC.StartPage ()
71 
72 dib = ImageWin.Dib (bmp)
73 scaled_width, scaled_height = [int (scale * i) for i in bmp.size]
74 x1 = int ((printer_size[0] - scaled_width) / 2)
75 y1 = int ((printer_size[1] - scaled_height) / 2)
76 x2 = x1 + scaled_width
77 y2 = y1 + scaled_height
78 dib.draw (hDC.GetHandleOutput (), (x1, y1, x2, y2))
79 
80 hDC.EndPage ()
81 hDC.EndDoc ()
82 hDC.DeleteDC ()

 注:python调用win32接口打印照片

posted on 2015-05-15 16:16  PeteYan  阅读(3300)  评论(0编辑  收藏  举报