From 29072dc20c8b502e22734a8ed571b1aab89aa0e3 Mon Sep 17 00:00:00 2001 From: knb Date: Fri, 17 Apr 2026 03:25:39 +0900 Subject: [PATCH] Update docs and add sample image for label workflows. Capture design notes for merge-print and PNG fit behavior, clean up Ruby README formatting, and include a new sample PNG for print testing. Made-with: Cursor --- reference/note.adoc | 44 ++++++++++++++++++++++++++++++++++++++++++++ ruby/README.md | 11 +++++------ samples/aBw70.png | Bin 0 -> 5354 bytes 3 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 samples/aBw70.png diff --git a/reference/note.adoc b/reference/note.adoc index e69de29..cc54542 100644 --- a/reference/note.adoc +++ b/reference/note.adoc @@ -0,0 +1,44 @@ += pTouch Label ノート + +== 差込印刷機能追加(案) + +SVG ファイルを template として、JSON/YAML ファイルで受け取った内容を差込印刷する。 + +SVG template の text element の data-field attribute をキーにして 印字テキストを JSON/YAML ファイルのデータで置き換える + +---- + + + + Label + + +---- + +という SVG ファイルと + +^^^^ +label: "ラベル" +---- + +という YAML ファイルを受け取ったら、 + +SVG の text の中身のテキストを"ラベル" に置き換えるという感じです。 + +== PNG 自動拡大・縮小(後日実装メモ) + +PNG でも、現在テープ幅(printable_dots)に合わせた自動拡大・縮小を可能にしたい。 +既定動作は現状維持(自動拡大・縮小 OFF)とし、オプションで ON/OFF を切り替える。 + +実装方針(案): + +- lib 側に「現在テープ幅へ raster をフィットする」共通 API を追加する。 +- PNG/SVG とも最終的に raster になるため、fit 処理は共通化する。 +- CLI には `--fit-current-tape`(仮)を追加し、明示時のみ有効化する。 +- まずは `contain` 相当(縦横比維持で収める)を実装する。 + +検討ポイント: + +- 1bit 画像の縮小品質(単純 nearest だと潰れやすい)。 +- 既存の length x width 表示/内部座標との整合。 +- 既存ユーザー互換性(デフォルト OFF を維持)。 diff --git a/ruby/README.md b/ruby/README.md index bd2ab7d..0354cbe 100644 --- a/ruby/README.md +++ b/ruby/README.md @@ -5,12 +5,10 @@ ## 前提 1. リポジトリルートで共有ライブラリをビルドする(`libptouch.so` が `build/` に生成されます)。 - - ```bash + ```bash cmake -S .. -B ../build cmake --build ../build - ``` - + ``` 2. Ruby 3.0 以上と `ffi` gem。 ## インストール(開発時) @@ -37,7 +35,7 @@ C の `ptouch-print` と同様の流れで、**PNG/SVG 入力**(`-w`/`-H` や SVG は現在装着テープの印字可能幅に合わせて自動拡大・縮小します(USB 接続が必要)。 後方互換のため `ptouch-print-png` も引き続き使えます。 -オプションは C 側に合わせ、**`-p` / `--pid`** で USB 製品 ID(16 進可)を指定できます。省略時は PT-P900W(`Libptouch::USB_PID_PTP900W` = `0x2085`)。例: PT-P750W `0x2062`、PT-P710BT `0x20af`(`libptouch.h` / `Libptouch` 定数と同じ)。 +オプションは C 側に合わせ、`**-p` / `--pid`** で USB 製品 ID(16 進可)を指定できます。省略時は PT-P900W(`Libptouch::USB_PID_PTP900W` = `0x2085`)。例: PT-P750W `0x2062`、PT-P710BT `0x20af`(`libptouch.h` / `Libptouch` 定数と同じ)。 また、`--template`(SVG)と `--data`(JSON/YAML)を使うと `data-field` 属性をキーにした差込印刷が可能です。 `--trim-right[=DOTS]` を付けると、libptouch 側の共通処理でラベル右側の空白ドット列を削減します。`DOTS` 省略時は左余白ドット数を使い、取得失敗時は `0` にフォールバックします。 @@ -104,4 +102,5 @@ ctx.dispose - `check_raster` / `print_raster` / `png_file_to_raster` / `svg_file_to_raster_fit_current_tape` / `status_bytes` / `status_hash` / `current_media_info` - `current_media_info` には `print_dpi` / `feed_dpi` / `tape_width_mm` / `printable_height_dots` / `min_feed_mm` などを含む(テープ幅方向は `printable_height_dots`) - `Libptouch.parse_status(raw)` … 32 バイトを Hash に展開(機種・テープ幅・**テープ種類**・色・**状態(status_kind)**・エラービット・`raw_hex` など) -- C の `libptouch_status_fprint`(`FILE *`)は FFI からはバインドしていません。テキスト出力の代わりに `parse_status` / `status_hash` を使ってください。 +- C の `libptouch_status_fprint`(`FILE` *)は FFI からはバインドしていません。テキスト出力の代わりに `parse_status` / `status_hash` を使ってください。 + diff --git a/samples/aBw70.png b/samples/aBw70.png new file mode 100644 index 0000000000000000000000000000000000000000..9190dd4681002f3c7afb2d3ccc4df16cc9b01e7b GIT binary patch literal 5354 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 L3GuG;ieLM0cIN@o literal 0 HcmV?d00001