0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ACRにおけるエンジンとデザイナの分離

0
Posted at

ACRの開発においては、役割の異なる2つのプログラムが必要になる。

  1. 帳票を描画・出力するための描画エンジン
  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からのアドバイスがあってのことだった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?