2TBの雑文置き場

ブログというより説明書置き場というか

レシートプリンターをダイマに活かす話(WIP)

ウサミンが働いてたメイド喫茶行ってみたくね?

ウサミンこと安部菜々さん、過去に割と謎が多いものの、「地下アイドルをやっていたことがある」ことと「メイド喫茶で働いていたことがある」のは判明しています。現在はアイドルをなさっているわけですから、件のメイド喫茶に行ったところでウサミンに会えるわけではありませんが、その歴史をたどる一環として興味深くはあるでしょう。 そこで、その気分だけでも味わうべく、架空の喫茶店のレシートを仕立ててみようというのが今回のお話でございます。

レシートを印刷するにはレシートプリンターが必要

そもそも、レシートプリンターとはいかなるものなのか説明せねばなりますまい。レシートプリンターは、文字通りレシートを印刷する道具ですが、一般にはレジPOSシステムなどと連動して領収書としてのレシートを発行するために用いられます。一方で、「感熱紙を使った超小型プリンター」としても用いることが出来、民生用途としてもたまーに商品が登場します(そして大抵は長持ちせずに市場から消えてゆきます)。今回は、この「普通のレシートと同様の作りである」ことを活かし、ダイマに活かそうというわけですね。

ダイマに使うのであれば、いくつか追加で考えるべきことが出てきます。まず、ネットで写真を掲載するだけにするのか、誰かに渡すことも考えるのか。渡すのであれば、その場で印刷して手渡せるのが一番ベストであり、持ち運べる大きさ・仕組みでなくてはなりません。また、レシートプリンターは通常、前述の通りなんらかのPOSシステムなどと連動させて使いますが、今回のようなダイマ向けPOSシステムなど当然存在しませんので、印刷用システムはある程度自作する必要が出てきます。

この辺を考慮した結果、今回はスター精密株式会社のSM-L200を用いることにしました。いくつか理由がありますが、決め手となったのはStarwebPRNT ブラウザーというアプリの存在です。これを用いると、JavaScript(とHTML/Canvas)の知識だけでスマホからプリントを行うことができると言うではありませんか。

定型文の印刷なので、システムを作り込む必要がない

将来の展望はありますが(後述)、さしあたってまず作りたいのは「それっぽく見えるレシート」です。つまり、本物のPOSシステムのようになにかのDBなどと連動する必要もなければ一切の計算を行う必要もありません。とにかく印刷したい内容を順に出力するだけです。幸い、今回の仕組みでは特定の関数を順に呼び出していくだけで内容の組み立てができるようでした。印刷画面の作り込みすら(とりあえずは)面倒だったので、元のサンプルをそのままです。冒頭などに「店舗ロゴ」を表示するためにはCanvasに描画した画像データを送り込む必要があるみたいなので、その部分だけやや知識を求められる程度1

いきなりですが、印刷したものがこちらとなります。

f:id:twoterabytes:20200511075052j:plain

これを作るにあたって注意したことがいくつかありまして、

  • 本物のレシートにならないようにした
    • 日本円を用いないなど、誤って実在のレシートであると思われないように工夫しました。
    • ついでに、適度に異世界感が出るよう、数字区切りを日本ではふつう用いられない4桁区切りにしたり、日時をユリウス通日とインターネットタイムを組み合わせた架空の表記にするなどしています。
  • その上で、本物のレシートに見えるようにはした
    • 既存のレシートによく用いられる表記をパロっています。冒頭のロゴに始まり、店舗名と電話番号、お店からのメッセージ、商品項目と小計・合計、支払額とお釣り。店舗側で管理に使用していると考えられるレシートIDとそれを示すバーコード、そして一般には宣伝文句やお店のホームページにつながるQRコード

それっぽくしつつ問題を起こさないことを目標としています。Twitterに載せたのは最低限の内容というところなので、これはもうすこし工夫の余地がありますね。

将来の展望

さて、現状では「レシートのダイマ」は珍しいと思います。何しろレシートプリンターを持っている人が少ないでしょうし、そこから任意のデータを印刷できるよう開発を行えるPとなればもう殆どいらっしゃらないのでは?

そこで、これを更に推し進め、「名刺の代わりにレシートを渡す」というのを将来的にやりたいなあと思っています。以下メリット。

  • 珍しいので印象に残る。
  • (私にとっては)作るのが簡単。
  • 印刷コストが安い。
  • 印刷内容をその場である程度自由に変更可能(なようにシステムを作り込むことができる)。
  • モバイルインクジェットプリンターに比べて小さく軽く取り扱いが楽。

なおデメリット。

  • 紙としてはペラペラな上、名刺と大きさが異なるため大事に取り扱われない可能性が高い。
  • プリンター自体は別に安くはない。
  • システム開発が必要。
  • 単にレシートであると言うだけでは、インパクトは何回も出せはしない。
  • モノクロのみなので表現方法に工夫が必要。
    • 事実上2値なので、グラデーションの再現にもディザリングを用いた減色などが必要

他にも、写真をcanvasに乗っけてポケットプリンタよろしく印刷してみるというのも面白そうです。白黒なので、事前処理にちょっと工夫が必要そうですが…2

まだまだ要研究

現状はとりあえず印刷ができただけなので、今後の開発によりさまざまを高めていきます。今回はとりあえず使い方がわかったよー的な感じということで一つ。


  1. 本来であれば、頻繁に印刷するロゴなどの画像データはプリンター側に保存しておき、簡易な仕組みで呼び出すことができるようですが、今回は汎用性を考えてこの方法は取っていません。

  2. 2値白黒写真に変換するわけですが、その前に減色せずに送った場合にどうなるかなどを確かめておく必要がありそうです。そのままでもそれなりの結果が得られるならそれはそれ。