pythonで印刷するメモ(mac・linux編)

今回はpythonから何かをプリンターで印刷したい時にどうすればいいかについてです。
自分用のメモ書きなので適当な説明です。

テキストを印刷してみる

import subprocess

# ただのテキスト
text = 'print out message'
# ファイルから印刷する場合
text = open('text.txt', 'r').read()

p = subprocess.Popen('lpr', stdin=subprocess.PIPE)
p.communicate(text)
p.stdin.close()

lprコマンドにパイプしてデータを渡すだけで印刷ができました。とても簡単です。

画像を印刷してみる

今回やりたかったのは、画像を生成してそれをファイルとして書き出さずにそのまま印刷する方法です。PILで適当な画像を生成して印刷してみます。

import subprocess
from PIL import Image
from StringIO import StringIO

buf = StringIO()

# create an image
screen = (500, 500)
bgcolor = (0x00, 0x00, 0x00)
img = Image.new('RGB', screen, bgcolor) 

# save this image to memory as a png image
img.save(buf, 'PNG')

# print out
p = subprocess.Popen('lpr', stdin=subprocess.PIPE)
p.communicate(buf.getvalue())

p.stdin.close()
buf.close()

StringIOを使ってメモリ上に画像ファイルを作って、それをlprコマンドに渡してあげることで印刷することができました。