Files
AveryDennisonUtil/README.md
T
yoshikazu 19d1c39370 Initial commit: OtozaiPrinter (AveryDennisonUtil) ラベル/レシート レイアウト設計・印刷 MFC アプリ
- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム
- コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否
- GDI 直接印刷、.otz 保存/再読込(版数つき)
- MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
2026-06-05 17:27:29 +09:00

5.7 KiB
Raw Blame History

AveryDennisonUtil

ラベル/レシートのレイアウトを画面上で設計し、Windows プリンターへ印刷する MFC (VC++) デスクトップアプリ。 高価な中華製ラベルソフトの置き換えを目的とする。ダイアログベースアプリ(左側にボタン列、右側に編集キャンバス)。

できること

  • 全印刷領域(用紙/ラベルサイズ)の確定(用紙サイズ ボタン。ロールラベルのプリセット + 余白指定)
  • 複数の印刷領域(ゾーン)の配置・サイズ変更(ドラッグ移動 / ハンドルでリサイズ)
  • 各領域に印刷するデータの入力
    • テキスト(フォント・サイズ・揃え・太字)
    • 矩形枠 / 直線(区切り)
    • 画像(PNG/JPG/BMP、.otz に埋め込み)
  • 編集操作
    • コピー / 貼付け / 複製(Ctrl+C / Ctrl+V / Ctrl+D)
    • 重なり順(前面 / 背面 ボタン、Ctrl+] / Ctrl+[ で前後へ)
    • 整列(整列... ボタン → 用紙/余白を基準に 左右中央/上下中央など)
    • グリッド/スナップ(グリッド/スナップ チェック、1mm グリッド。矢印キーで微調整、Shift で大きく)
  • 原紙(位置合わせ用の背景下絵)
    • 原紙... ボタンで画像を読み込み、用紙全体に敷く(画面では薄く表示し、上に載せるアイテムの位置合わせを容易にする)
    • 読み込み時に 用紙サイズを原紙ファイルのサイズに合わせる。px→mm 換算の基準を選択可能:
      • 画像の埋め込みDPI(ファイル本来の実寸)/ 用紙のDPI設定 / 変更しない
    • 原紙を印刷 チェックで、原紙自身を印刷する/しないを選択(既定 = 印刷しない=既存の印刷済みラベルに重ねる用途)
    • 消去 で原紙を除去。原紙画像は .otz に埋め込み保存
  • Windows プリンターへ印刷(GDI、CPrintDialog 経由の直接印刷。ラベル mm(0,0) を印字可能領域の左上に合わせて出力)
  • レイアウトの保存・再読込(*.otz。版数つきヘッダで前方/後方互換に配慮)

アーキテクチャ(要点)

  • すべてのジオメトリは 1/100 mm の整数で保持(ピクセルで持たない)。
  • 描画は各アイテムの Draw(CDC&, const CoordMap&) ただ 1 つに集約し、 画面エディタと印刷で同一コードを共有。違いは CoordMap が持つ DPI とズームだけ。
  • これにより画面(≒96dpi)とサーマルラベル(≒203dpi)で同一レイアウトが 物理的に正しいサイズで出力される。
役割 クラス
アプリ(ダイアログ起動のみ) CAveryDennisonUtilApp (AveryDennisonUtil.cpp)
メイン ダイアログ(ボタン・ファイル・印刷) CMainDialog : CDialog (MainDialog.cpp)
編集キャンバス(子ウィンドウ・マウス操作) CCanvas : CWnd (Canvas.cpp)
データモデル(用紙+アイテム列・.otz 保存) CLabelLayout (LabelLayout.cpp)
共有描画(画面・印刷) Render::DrawLayout (RenderScene.cpp)
単位変換 CoordMap (CoordMap.h)
アイテム CPrintItem 派生:CTextItem / CShapeItem / CImageItem

ビルド / デバッグ

  • VS2022 (v143) / x64 / MFC・CRT は静的リンク。単一 exe で外部 DLL に依存しないため、 Visual Studio 2022 で AveryDennisonUtil.sln を開き、構成 Debug(または Release)/x64 を選んで F5(デバッグ実行)するだけで動く(Debug 用 DLL の配置は不要)。
  • コマンドラインからビルドする場合:
& "C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\MSBuild.exe" `
  AveryDennisonUtil.sln /p:Configuration=Debug /p:Platform=x64
  • 出力: bin\Debug\AveryDennisonUtil.exe(Release は bin\Release\)。
  • 補足: このマシンには vcpkg のグローバル統合が入っているが、本プロジェクトは未使用のため .vcxproj で VcpkgEnabled=false にして無効化済み(不要な include 注入と pwsh デプロイ手順を回避)。

使い方

  1. 用紙サイズ ボタンでラベル寸法を設定(ロールラベルのプリセットあり。余白 を入れると破線ガイドが出て整列の基準になる)。
  2. テキスト/画像/矩形枠/直線 ボタンでアイテムを追加。
  3. キャンバス上でドラッグ移動、ハンドルでリサイズ。ダブルクリック(または プロパティ ボタン)で編集。Del キー / 削除 ボタンで削除。
  4. コピー/複製(コピー+貼付 または 複製 / Ctrl+C,V,D)、重なり順(前面/背面)、整列... で配置を整える。グリッド/スナップ を入れると 1mm グリッドへ吸着し、矢印キーで微調整できる(Shift で大きく移動)。
  5. 既存ラベル等に合わせたい場合は 原紙... で下絵を読み込む。読込時に用紙を原紙サイズへ合わせるか(埋め込みDPI / 用紙DPI)を選択。薄く表示された原紙に合わせてアイテムを配置し、原紙そのものも印刷したいときは 原紙を印刷 をチェック。
  6. 印刷 ボタン → プリンタを選んで印刷。
  7. 保存 / 名前を付けて保存 で .otz 保存、開く で再読込。

検証のヒント

実機が無い場合、Microsoft Print to PDF へ印刷すると 203dpi 相当の解像度差を含めて 配置・サイズが mm 通りかを PDF 上で確認できる。