Access windows default printer

Hi there,

i’m trying to print out some images saved out from Touch.
I found a python script for this, wich workes as long as i run it through PyCharm.

If i run it within Touch it gives me some errors wich i don’t know how to handle.

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 ()

I found different posts about that ‘_imaging’ thing but none of the mentioned solutions worked for me.

My current version of pillow is 5.1.0.

Thanks in advance

Patrick

Hey Patrick - have you added your external python site-packages to your touchdesigner path?

import sys mypath = "C:/Python35/Lib/site-packages/mymodule" if mypath not in sys.path: sys.path.append(mypath)
docs.derivative.ca/index.php?ti … ng_Modules

Looking at your errors the first thing that jumps out to me is that import error. Given that you can run it from PyCharm, but not from Touch my first guess is that you’re missing those external libraries.

Thanks for your reply.

Yes I tried this too.

I added the path under preferences->external python path and also tried the code you posted.

Before I did this the error was “No module named PIL”.

I also tried to point directly to the Image.py inside of the PIL folder.