天空下的承诺 发表于 2015-12-3 10:13:34

Python win32打印示例

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 > bmp.size:
60   bmp = bmp.rotate (90)
61
62 ratios = / bmp.size, 1.0 * printable_area / bmp.size]
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 =
74 x1 = int ((printer_size - scaled_width) / 2)
75 y1 = int ((printer_size - 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接口打印照片
页: [1]
查看完整版本: Python win32打印示例