0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

レシートを Markdown みたいに書いて印刷できる OSS「receiptline」の紹介

0
Posted at

お店の機器とシステムをつなぐ仕事をしています。

レシートプリンターで何かを印刷しようとすると、まずメーカーごとのコマンドにぶつかります。ESC/POS、StarPRNT……と方言があって、文字を大きくする・罫線を引く・用紙を切るのにも、それぞれバイト列を調べて組む必要があるんですよね。

そこで今回は、**レシートを Markdown のようなテキストで書くだけで、プリンターのコマンドや SVG の画像に変換してくれる OSS「receiptline」**を紹介します。

内容は 2026 年 10 月時点の公式 README・npm の情報です。

receiptline とは

README の一言は「Markdown for receipts.」。名前は Receipt と Streamline を合わせた造語だそうです。

対応しているのは、エプソン TM、セイコーインスツル RP、スター精密 MC、シチズン CT、富士通 FP の各シリーズです。

まずはブラウザで試せます

インストール不要で、公式の ReceiptLine Designer で書いたものがその場でプレビューされます。

👉 https://receiptline.github.io/designer/

左に書くと右にレシートの見た目が出るので、記法を覚えるのはここが一番早いです。

記法の基本

列と寄せ

列の区切りは | です。README では「列は | に磁石のように引き寄せられる」と説明されていて、空白をどちら側に置くかで寄せが決まります。

  • |列 |(右だけ空ける)→ 左寄せ
  • | 列|(左だけ空ける)→ 右寄せ
  • | 列 |(両側を空ける)・区切りの無い 1 行 → 中央

README の例(2 列の表+罫線+横 2 倍):

Asparagus | 0.99
Broccoli | 1.99
Carrot | 2.99
---
^TOTAL | ^5.97

文字の装飾

記法 意味
_ 下線
" 強調(Emphasis)
` 反転
^ 横 2 倍
^^ 縦 2 倍
^^^ 2 倍サイズ(^ を増やすと 6 倍まで)
~ 空白

罫線と用紙カット

  • - だけの行 → 水平の罫線
  • = だけの行 → 用紙カット

プロパティ({キー: 値})

1 列だけの行に {キー: 値; キー: 値} と書くと、レイアウトや画像・コードを指定できます。日本語の例(公式の example から抜粋):

{border:line}
^領 収 証
{border:space}
{width:*,2,10}
ビール                 | 2|    ¥1,300

{width:*,2,10} で列の幅を、{border:line} で列の境界を縦線にしています。

バーコードと QR コード

{code:2012345678903;option:ean,hri}

option に種類(upc ean/jan code39 itf codabar/nw7 code93 code128)を書きます。hri を付けると下に数字が出ます。QR コードは option に qrcode を指定します。

画像は {image: <base64 の PNG>} で埋め込めます(モノクロ推奨)。

Node.js から使う

npm install receiptline

README の最小の例です。

const receiptline = require('receiptline');
const doc = '{code:2012345678903;option:ean,hri}';
const display = { cpl: 42, encoding: 'multilingual' };
const svg = receiptline.transform(doc, display);

transform(doc, printer) の第 2 引数で、何に変換するかを決めます。

オプション 意味
cpl 1 行の文字数(既定 48)
encoding 文字コード。日本語は cp932 または shiftjis
command 出力の種類(既定 svg)
cutting 用紙をカットするか(既定 true)
spacing 行間を空けるか(既定 false)
gradient 画像を写真向けに処理するか(既定 true)

command には、たとえば次のようなものがあります(全部は README の Printer configuration を参照)。

  • svg(画面表示用)・text(プレーンテキスト)
  • escpos / epson / sii / citizen / fit(ESC/POS 系)
  • starmbcs(スター精密 StarPRNT の日本語)・starlinembcs(Star Line Mode の日本語)

同じテキストから、画面のプレビュー(SVG)と印刷用のコマンドの両方を作れるのがうれしいところです。

TypeScript の型定義も同梱されています。ブラウザでも lib/receiptline.js を読み込めば window.receiptline として使えます。

プリンターへ送るには

ここは注意点で、README には「プリンターとの通信・ステータス処理・エラー処理は範囲外」と明記されています。receiptline が作るのは送るためのバイト列までです。

送る部分は、公式の周辺ツールが用意されています。

  • ReceiptIO(CLI):IP アドレスを指定して、そのまま印刷できます
    receiptio -d 192.168.192.168 -c 42 example.receipt
    
  • リポジトリの example/nodejs:Web フォームの入力をサーバーでコマンドに変換して、ソケットでプリンターへ送る例
  • Receipt.js:ブラウザ用の SDK(Web Serial で印刷)

まとめ

  • レシートをテキストで書いて、SVG にもプリンターのコマンドにも変換できる
  • 記法は | と空白で寄せ、- で罫線、= でカット、^ で拡大、とシンプル
  • まずは Designer で触ってみるのがおすすめです

メーカーごとのコマンド表と格闘する前に、一度試してみてください 🙌

参考(公式)


お店のプリンター・決済端末などの機器と、Web やアプリをつなぐ開発をお手伝いしています。
👉 接続開発サポート|MonoUni

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?