webブラウザでファイルをアップロードしたり、URLをHTTP-POSTしたら印刷できる奴を作った。研究室のwebサーバーに設置したらわりとウケてた。

出力デバイスとしてプリンタがより手軽に使えるようになる。
例えばメッセージをプリンターから出したりとか、Ethernetにつながったハードウェアから印刷したりとか、いろいろなARマーカーをどんどん吐き出すとかできるのできっと便利。


SinatraからMac/Linuxのlprコマンドを呼び出して印刷する感じの実装をした。
URLをpostされたら、content_typeをチェックしてから、html以外ならダウンロードして印刷、htmlの場合はxvfbとwebkitを起動してキャプチャしてPDFを作って印刷するとかがんばった実装をした。


https://github.com/shokai/print-server




■セットアップ
Sinatraなのでローカルですぐ起動させられる。

git clone git@github.com:shokai/print-server.git
cd print-server
brew install qt imagemagick
gem install bundler
bundle install
cp sample.config.yaml config.yaml
config.yamlにデフォルトプリンタの指定などが書いてある。
Linuxの人はREADME.mdを見ろ。


■起動
ruby development.rb
http://localhost:8080で起動する


■印刷
HTTP POSTで印刷できる
curl -d 'url=http://shokai.org/blog/' http://localhost:8080/url

multipart/form-dataでデータ入稿もできる。


■その他memo
このへんの事をするツールをhelperディレクトリにまとめてある


lprとlpstatで印刷している
ターミナルから印刷する – 橋本詳解


xvfbとwebkit起動してスクリーンショットを撮る
capybara-webkitでwebページのスクリーンショットを撮る – 橋本詳解


ImageMagickをmini_magickから使って、縦長のスクリーンショットを分割した
mini_magickとImageMagickで画像を切り取る – 橋本詳解


Prawnで画像を1つのPDFにまとめる
画像をpdfファイルにまとめる – 橋本詳解