0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QRコードをSVGで一括生成するときに、印刷事故を減らすための検証手順

0
Posted at

QRコードをSVGで書き出せば、拡大しても輪郭は崩れません。しかし「ベクター画像であること」と「実際の印刷物を読み取れること」は別問題です。

一括生成では、画質だけでなく次の事故も起きます。

  • CSVのヘッダーまでQRコードになった
  • 2列目のメモも別のQRとして処理された
  • 出力ファイルと元データの対応が分からなくなった
  • 画面では読めたが、実寸印刷では読めなかった
  • 一部だけフォールバック画像になっていた

この記事では、複数のURLをSVGで一括生成し、ZIPの構造確認、対応表の検査、実寸印刷テストまでを一つの手順にします。

1. 入力データを「1セル1コンテンツ」にする

入力は1列だけにし、ヘッダーを削除します。

https://example.org/manual/item-001
https://example.org/manual/item-002?lang=ja
https://example.org/support/item-003

一括ツールによっては、CSVやExcelの「空でない各セル」を順番に読み取ります。その場合、url というヘッダーや隣のメモ列もQRコードになります。

生成前に、空でない項目数を記録しておきます。上の例なら期待値は3です。

長いURL、クエリ文字列を含むURL、日本語テキストなど、密度が高くなりやすい値もテスト用データに含めます。短いURLだけで合格させると、本番の最も難しいコードを見落とします。

2. 共通設定でSVGを一括生成する

以下の手順では、CSV・Excel・TXT・貼り付け入力に対応する日本語の一括QRコード生成ツールを使います。最大1,000件をブラウザ内で処理でき、SVGをZIPで取得できます。

設定は次のようにしました。

  • 出力形式: SVG
  • 前景色: 濃色
  • 背景色: 明色
  • 余白: 0にせず、明確なクワイエットゾーンを残す
  • 誤り訂正: ロゴなしはMを基準に確認
  • ロゴを使う場合: 小さくし、Hで再テスト
  • 形状: 最初の基準テストは標準の四角

一括生成では、同じ設定が全QRコードに適用されます。最も密度の高いデータでも読める設定を基準にするほうが安全です。

3. ZIPの内容を機械的に確認する

ダウンロード名は qr-codes-batch-[timestamp].zip の形式です。最新のZIPを変数に入れます。

zip_file="$(ls -t qr-codes-batch-*.zip | head -n 1)"
unzip -l "$zip_file"

期待する構造は次のとおりです。

images/qr-001.svg
images/qr-002.svg
images/qr-003.svg
index.csv
index.txt
index.html
README.txt

画像数を数えます。

unzip -Z1 "$zip_file" \
  | awk '/^images\/qr-[0-9]+\.svg$/ { count++ } END { print count+0 }'

この値を、生成前に記録した入力件数と比較します。

次にインデックスを確認します。

unzip -p "$zip_file" index.csv | sed -n '1,6p'

index.csv には、生成時刻、連番、ファイル名、パス、形式、状態、元コンテンツが入ります。最低限、次を確認します。

  1. 行数が入力件数と一致する
  2. 最初と最後のコンテンツが元データと一致する
  3. filenamepath の連番が飛んでいない
  4. status がすべて generated になっている

fallback があれば、その行は選択形式で正常生成できなかったことを示します。見た目だけで流さず、対象の入力値と設定を調べます。

4. SVGの外形だけを先に検査する

SVGはテキストなので、展開後に viewBox とサイズ指定を確認できます。

work_dir="$(mktemp -d)"
unzip -q "$zip_file" -d "$work_dir"

rg -n '<svg|viewBox|width=|height=' "$work_dir/images" | head -n 12

ここで確認できるのは、SVGとしての外形です。これだけでは読み取り成功を証明できません。クワイエットゾーン、コントラスト、データ密度、印刷サイズ、素材、照明、カメラ性能は別に検証します。

5. 代表3件で実寸のテストシートを作る

全件を印刷する前に、次の3件だけでテストします。

  1. 最も短いURL
  2. 最も長い、または密度の高いデータ
  3. ロゴや装飾を使う場合は、その最終デザイン

典型的な短いURLなら、まず30mm角前後を開始点として試せます。ただし、これは普遍的な最小サイズではありません。長いデータ、低コントラスト、曲面、遠距離、光沢素材では、より大きなサイズが必要です。

テストシートには、QR画像の下に qr-001.svg のようなファイル名を印字します。スキャン結果と index.csv を照合できるからです。

6. 成功条件を先に決める

「1回読めた」だけでは判定が曖昧です。例えば次の条件を決めます。

  • 2種類以上の端末で読む
  • 正面と斜めから読む
  • 想定する距離で読む
  • 通常照明と弱い照明で読む
  • 光沢がある場合は反射が出る角度でも読む
  • 最も密度の高いコードを必ず含める

ラベルなら曲面や軽いしわ、掲示物なら実際の設置距離も再現します。失敗したら、装飾を減らす、コントラストを上げる、余白を増やす、サイズを大きくする、またはエンコードする文字列を短くする、という順で原因を切り分けます。

7. 静的QRと更新可能なリンクを分ける

SVGであっても、静的QRの内容は画像内に固定されています。印刷後にリンク先が変わる可能性があるなら、一括生成の前に更新可能なリダイレクトやDynamic QRを使うか判断します。

逆に、商品ID、固定マニュアルURL、教室内の固定テキストなど、内容が変わらないものは静的QRがシンプルです。

まとめ

一括QR生成で重要なのは、生成ボタンより前後の検査です。

  • 入力は1セル1コンテンツにする
  • 期待件数を先に記録する
  • SVGでも高コントラストと余白を守る
  • ZIPの画像数と index.csv を照合する
  • fallback を見逃さない
  • 最も難しい3件を実寸で印刷する
  • 複数端末、角度、照明、距離で成功条件を確認する

SVGは拡大に強い形式ですが、読み取り品質を自動で保証するものではありません。元データ、出力マッピング、実寸印刷の3段階を分けて確認すると、一括生成の事故をかなり減らせます。

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?