请教一下,谁知道怎样编程控制打印机打印照片? 用 vc, python 为佳,多谢

2014-06-10 15:41:26 +08:00
 hfeeki
请教一下,谁知道怎样编程控制打印机打印照片? 用vc, python为佳,多谢
操作系统是windows
5418 次点击
所在节点    程序员
8 条回复
hfeeki
2014-06-10 15:43:49 +08:00
假设只提供一个图片文件的全路径名,怎样开发一个把图片打印出来的函数?
mhycy
2014-06-10 15:49:10 +08:00
貌似要调用打印机驱动。。。具体非常复杂,困难,麻烦。。。。
hfeeki
2014-06-10 16:55:40 +08:00
貌似不是很负责、困难、麻烦。。。 我已经知道怎样做了
librehat
2014-06-10 18:15:19 +08:00
用Qt吧,有现成函数库可以打印。QPrinter
Comdex
2014-06-10 18:18:53 +08:00
@hfeeki 请问一下楼主能分享一下吗
loading
2014-06-10 18:25:57 +08:00
LZ 没品
hfeeki
2014-06-10 19:24:00 +08:00
import win32print
import win32ui
from PIL import Image, ImageWin

#
# Constants for GetDeviceCaps
#
#
# HORZRES / VERTRES = printable area
#
HORZRES = 8
VERTRES = 10
#
# LOGPIXELS = dots per inch
#
LOGPIXELSX = 88
LOGPIXELSY = 90
#
# PHYSICALWIDTH/HEIGHT = total area
#
PHYSICALWIDTH = 110
PHYSICALHEIGHT = 111
#
# PHYSICALOFFSETX/Y = left / top margin
#
PHYSICALOFFSETX = 112
PHYSICALOFFSETY = 113

printer_name = win32print.GetDefaultPrinter ()
file_name = "test.jpg"

#
# You can only write a Device-independent bitmap
# directly to a Windows device context; therefore
# we need (for ease) to use the Python Imaging
# Library to manipulate the image.
#
# Create a device context from a named printer
# and assess the printable size of the paper.
#
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)

#
# Open the image, rotate it if it's wider than
# it is high, and work out how much to multiply
# each pixel by to get it as big as possible on
# the page without distorting.
#
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)

#
# Start the print job, and draw the bitmap to
# the printer device at the scaled size.
#
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 ()
tywtyw2002
2014-06-11 13:22:36 +08:00
pdflatex。 然后用cups。
python生成一个latex脚本,运行下pdflatex编译,剩下的cmd call lpr去打印。
没想折腾cups api。
linux上面没问题。

以前做过一键重排版ppt,然后打印。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/116711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX