- 用紙設計キャンバス(1/100mm 基準)・テキスト/画像/矩形/直線アイテム - コピー/複製/Zオーダー/整列/グリッドスナップ、原紙(下絵)読込と印刷可否 - GDI 直接印刷、.otz 保存/再読込(版数つき) - MFC/CRT 静的リンクで VS2022 IDE から F5 デバッグ可
71 lines
5.7 KiB
Markdown
71 lines
5.7 KiB
Markdown
# 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 上で確認できる。
|