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

71 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`](CoordMap.h) が持つ DPI とズームだけ。
- これにより画面(≒96dpi)とサーマルラベル(≒203dpi)で同一レイアウトが
物理的に正しいサイズで出力される。
| 役割 | クラス |
|------|--------|
| アプリ(ダイアログ起動のみ) | `CAveryDennisonUtilApp` ([AveryDennisonUtil.cpp](AveryDennisonUtil.cpp)) |
| メイン ダイアログ(ボタン・ファイル・印刷) | `CMainDialog : CDialog` ([MainDialog.cpp](MainDialog.cpp)) |
| 編集キャンバス(子ウィンドウ・マウス操作) | `CCanvas : CWnd` ([Canvas.cpp](Canvas.cpp)) |
| データモデル(用紙+アイテム列・.otz 保存) | `CLabelLayout` ([LabelLayout.cpp](LabelLayout.cpp)) |
| 共有描画(画面・印刷) | `Render::DrawLayout` ([RenderScene.cpp](RenderScene.cpp)) |
| 単位変換 | `CoordMap` ([CoordMap.h](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 上で確認できる。