OMRマクロ作成ツールは、スキャンしたマークシート(チェック欄)を読み取る設定(マーク読み取りマクロ DW_OMR)を作成するための支援ツールです。
ページの四隅に配置したQRコードを基準点としてアフィン補正を行うため、スキャン時の傾き・ズレ・スケール変化に追従してマーク欄の塗りつぶしを判定できます。
eDocArrangement2のメイン画面の「ツール」メニューから「OMRマクロ作成ツール」を選択して起動します。
画面は以下のようになっており、左側で設定を行い、右側に対象XDWのプレビューと配置中のマーク欄(矩形)が表示されます。
本ツールで扱うマークシート(フェイスシート)の例です。四隅に補正用QRを印字するエリアを設け、チェック欄をブロックごとに配置しています。
| 項目 | 説明 |
|---|---|
| XDWファイル / ページ | 対象のDocuWorks文書(マークシート)とページ番号を指定し、「読み込み / 再描画」でプレビューに表示します。ファイル欄へはドラッグ&ドロップでも指定できます。 |
| 識別ID | 補正用QRを判別するための識別子です。QRのデータは「<識別ID>:<役割>」(例 OMR001:TL)の形式で、識別IDでフィルタするため他のQRが混在していても基準点を判別できます。読み込み時にQRがあれば自動でセットされます。 |
| ■ レイヤー | マーク欄のブロック(グリッド)を「レイヤー」として複数管理できます。コンボボックスで編集対象のレイヤーを切り替え、「追加 / 複製 / 削除」で増減、「改名」でレイヤー名を変更します。レイヤー名はマーク名の接頭辞に使われます(後述)。 |
| ■ グリッド設定 | 選択中レイヤーのマーク欄をグリッド状に自動配置します。マーク個数・列数・行数・配置方向(右=行優先 / 下=列優先)・原点X,Y・列ピッチ・行ピッチ・マーク幅・マーク高を変更すると、即座に再配置・再描画されます(単位はmm)。 |
| ■ 選択中のマーク | プレビュー上でマークをクリックすると選択(赤枠)されます。「Name」でマーク名を変更、「選択マークを削除」で削除します。マークはドラッグで個別に移動でき、移動したマーク(橙色枠)はグリッド再配置の対象外になります。 |
| ■ マクロ生成 | 「対象ページ」で指定ページ/全ページを選び、「テンプレート貼り付け」でQRとマーク矩形をXDWへ書き込み、「マクロ作成」で DW_OMR 呼び出しマクロを生成します。 |
1枚のマークシートに性質の異なるチェック欄ブロック(例:「配信先部署」3×3と「処理区分」1×4)が複数ある場合、ブロックごとに別レイヤーとして配置できます。レイヤーごとに列数・行数・原点・ピッチ・セルサイズを独立して設定できます。
プレビューでは、選択中レイヤーのマークが青(移動済みは橙、選択中は赤)、それ以外のレイヤーのマークがグレーで表示されます。選択・ドラッグ・名前変更は選択中レイヤーのマークだけが対象です。
各マークの名前は、書き出し時に「<レイヤー名>_<マーク名>」の形(例 L1_Mark1, L2_Mark1)で自動的に接頭辞が付き、全体で一意になります。レイヤー名には「_ ; | : ,」は使用できません。テンプレート貼り付け・マクロ生成では、全レイヤーのマークが1つの DW_OMR 定義に統合されます。
配置したレイヤー設定はテンプレート貼り付け時にページのユーザー属性へ保存され、同じXDWを再度読み込むとレイヤー構成・マーク位置が復元されます。
OMR001。複数様式を扱う場合は様式ごとに変えます)。
このサンプル(配信先部署9個=レイヤーL1、処理区分4個=レイヤーL2)では、以下のマクロが生成されます。
# --- 識別ID(補正用QRの判別。QRデータ = OMR001:<役割>) ---
{%SET_U(MarkDef,FormId,OMR001)}
# --- QR基準点(テンプレートのQR中心 mm) ---
{%SET_U(MarkDef,QR,TL,X,16.30)}{%SET_U(MarkDef,QR,TL,Y,16.30)}
{%SET_U(MarkDef,QR,TR,X,193.68)}{%SET_U(MarkDef,QR,TR,Y,16.30)}
{%SET_U(MarkDef,QR,BL,X,16.30)}{%SET_U(MarkDef,QR,BL,Y,280.63)}
{%SET_U(MarkDef,QR,BR,X,193.68)}{%SET_U(MarkDef,QR,BR,Y,280.63)}
# --- マス定義(全レイヤー統合。キー = <レイヤー名>_<マーク名>) ---
# [レイヤー L1]
{%SET_U(MarkDef,Marks,L1_Mark1,X,57.00)}{%SET_U(MarkDef,Marks,L1_Mark1,Y,131.00)}{%SET_U(MarkDef,Marks,L1_Mark1,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark1,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark2,X,107.00)}{%SET_U(MarkDef,Marks,L1_Mark2,Y,131.00)}{%SET_U(MarkDef,Marks,L1_Mark2,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark2,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark3,X,157.00)}{%SET_U(MarkDef,Marks,L1_Mark3,Y,131.00)}{%SET_U(MarkDef,Marks,L1_Mark3,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark3,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark4,X,57.00)}{%SET_U(MarkDef,Marks,L1_Mark4,Y,141.00)}{%SET_U(MarkDef,Marks,L1_Mark4,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark4,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark5,X,107.00)}{%SET_U(MarkDef,Marks,L1_Mark5,Y,141.00)}{%SET_U(MarkDef,Marks,L1_Mark5,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark5,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark6,X,157.00)}{%SET_U(MarkDef,Marks,L1_Mark6,Y,141.00)}{%SET_U(MarkDef,Marks,L1_Mark6,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark6,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark7,X,57.00)}{%SET_U(MarkDef,Marks,L1_Mark7,Y,151.00)}{%SET_U(MarkDef,Marks,L1_Mark7,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark7,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark8,X,107.00)}{%SET_U(MarkDef,Marks,L1_Mark8,Y,151.00)}{%SET_U(MarkDef,Marks,L1_Mark8,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark8,Height,5.00)}
{%SET_U(MarkDef,Marks,L1_Mark9,X,157.00)}{%SET_U(MarkDef,Marks,L1_Mark9,Y,151.00)}{%SET_U(MarkDef,Marks,L1_Mark9,Width,5.00)}{%SET_U(MarkDef,Marks,L1_Mark9,Height,5.00)}
# [レイヤー L2]
{%SET_U(MarkDef,Marks,L2_Mark1,X,52.00)}{%SET_U(MarkDef,Marks,L2_Mark1,Y,176.40)}{%SET_U(MarkDef,Marks,L2_Mark1,Width,6.00)}{%SET_U(MarkDef,Marks,L2_Mark1,Height,6.00)}
{%SET_U(MarkDef,Marks,L2_Mark2,X,89.80)}{%SET_U(MarkDef,Marks,L2_Mark2,Y,176.40)}{%SET_U(MarkDef,Marks,L2_Mark2,Width,6.00)}{%SET_U(MarkDef,Marks,L2_Mark2,Height,6.00)}
{%SET_U(MarkDef,Marks,L2_Mark3,X,127.60)}{%SET_U(MarkDef,Marks,L2_Mark3,Y,176.40)}{%SET_U(MarkDef,Marks,L2_Mark3,Width,6.00)}{%SET_U(MarkDef,Marks,L2_Mark3,Height,6.00)}
{%SET_U(MarkDef,Marks,L2_Mark4,X,165.40)}{%SET_U(MarkDef,Marks,L2_Mark4,Y,176.40)}{%SET_U(MarkDef,Marks,L2_Mark4,Width,6.00)}{%SET_U(MarkDef,Marks,L2_Mark4,Height,6.00)}
# --- マーク検出(ページ1を指定) ---
{%SET_U(wk,n,{%DW_OMR(#Page,{%DW_GET(OpenName)},1,MarkDef,MarkResult,0.2,1.0)})}
# --- 結果ループ ---
{%IF({%GET_U(MarkResult,_QR_,Corrected)}=True,
{%LOOP ML {%GET_USER_DATA_KEY_COUNT(MarkResult,Marks)}(
{%SET_U(wk,name,{%GET_USER_DATA_KEY_BY_NUMBER(MarkResult,Marks,[L_IDX(ML)])})}
{%WRITE_LOG({%GET_U(wk,name)} = {%GET_U(MarkResult,Marks,{%GET_U(wk,name)},Marked)} ({%GET_U(MarkResult,Marks,{%GET_U(wk,name)},Ratio)}))}
)}
,
{%WRITE_ERROR_LOG(QR検出不足でマーク判定不可: 検出={%GET_U(MarkResult,_QR_,Detected)})}
)}
「コピー」ボタンで生成マクロをクリップボードへコピーし、eDocArrangement2のマクロ実行の処理にペーストすればマーク読み取りの処理が作成できます。判定結果は MarkResult の各マーク(フルネーム)配下に Marked(True / False / 判定不能)と Ratio(塗り比率)として格納されます。必要に応じて、結果ループ部分を業務に合わせて編集してください。
マークの読み取り精度や引数(判定閾値・内側マージン・輝度閾値・DPI)の詳細は、マクロリファレンスの マーク読み取り(OMR) DW_OMR を参照してください。