ACRの開発においては、役割の異なる2つのプログラムが必要になる。
- 帳票を描画・出力するための描画エンジン
- 描画内容を定義するためのデザイナ
⸻
Canvas仕様の選定
特にエンジンの中核となるのが、描画を担うCanvasである。
多くの帳票アプリケーションは、この部分に独自実装を採用している。
これは長年の運用で蓄積された技術であり、近年でも大きな変化は見られない。
ACRでは以下の技術を比較検証した。
• Skia
• Cairo
• Direct2D(Windows専用)
• SVG(Web用途)
この中から、最終的に Skia と Cairo を候補として検証を行った。
⸻
座標系と帳票の前提
帳票アプリケーションでは、座標は左上を基準として扱う。
これは以下の理由による。
• レイアウトが矩形ベースで定義される
• フォント配置を含めた位置決めが直感的に行える
• PDFも同様に座標系を持つ
この前提により、帳票は「左上基準での厳密な配置」が求められる。
⸻
Cairoを採用しなかった理由
初期段階ではCairoを採用した。
Cairoは描画結果としては問題なく、紙面出力も安定している。
しかし、デザイナの実装にはUIが必要となる。
Cairo自体はUIフレームワークではないため、デザイナの構築には別途UI基盤が必要になる。
この点から、デザイナとの統合を考慮し、Cairoの採用は見送った。
⸻
Avalonia + Skia の採用
デザイナのUI基盤として Avalonia を採用した。
Avaloniaは内部でSkiaを利用しており、同一の描画基盤を共有できるため、
• デザイナとエンジンで描画差異が出にくい
• クロスプラットフォーム対応が可能
という利点がある。
⸻
Skiaにおける文字描画の特性
Skiaは座標系としては左上基準を採用している。
しかし、文字描画に関しては異なる。
フォントレンダリングは
ベースライン(Baseline)基準で行われる。
これはSkia固有ではなく、FreeType系の一般的な仕様である。
⸻
問題となる点
帳票では左上座標で文字を配置するが、
Skiaにそのまま座標を渡すと、文字はベースライン基準で描画されるため、
• 同じ座標で描画しても位置が一致しない
• 他の帳票エンジンと同一結果にならない
という差異が発生する。
⸻
結論
• 帳票:左上基準で配置
• Skia文字:ベースライン基準で描画
この差を補正しない限り、既存帳票との互換性は成立しない。
この点が、ACR開発における重要な設計ポイントとなった。
面白いことに、この仕様についてAiからのアドバイスがあってのことだった。