はじめに
Word 文書は画像、テキストボックス、その他のフリーフローティングオブジェクトを、段落や表の通常のフローとは別の描画レイヤーに配置します。Aspose.Words FOSS for .NET はこの描画レイヤーを Shape と ShapeBase クラスを通じて公開し、Word が内部で使用しているのと同じ AutoShape、画像、テキストボックス、OLE オブジェクトモデルへのプログラムからのアクセスを提供します。このガイドでは、ライブラリがこれらの描画オブジェクト(位置決め、塗りつぶしと輪郭の書式設定、埋め込み画像、シェイプ内に配置されたテキスト)を DOCX、DOCM、DOTX、DOTM 文書でどのように表現・操作するかを示します。
これは、ロゴやグラフィックを配置したレポートやレターヘッドのテンプレートを作成するコード、浮動テキストボックスやコールアウトを含む文書を生成するコード、またはアップロードされた文書内に既に存在するシェイプを検査するコード(埋め込み画像のバイトを抽出したり、署名行の署名者名を読み取ったり、既存の画像を再配置したり)にとって有用です。
Aspose.Words FOSS for .NET は MIT ライセンスの下でリリースされ、.NET Standard 2.0 を対象としているため、.NET Framework 4.6.2+ および .NET 6、8、10 上でネイティブ依存なしに動作します。NuGet 経由でインストールするか、ソースからビルドしてください(下のクイックスタート参照)。これは商用で使用されている同じ Aspose.Words ドキュメントエンジンであり、書き直しやラッパーではないため、ここで説明する Shape と描画レイヤークラスは本番用の API です。
主な機能
シェイプと ShapeBase オブジェクトモデル
Word 文書にアンカーされたすべての AutoShape、テキストボックス、埋め込み画像、OLE オブジェクト、または ActiveX コントロールは、Shape クラスで表現されます――このクラスは sealed で、抽象的な ShapeBase 基底クラス上に構築されています。両者は同じ位置決めと書式設定のインターフェースを共有します:ジオメトリ用の Shape.Left、Shape.Top、Shape.Width、Shape.Height、Shape.Rotation、Shape.ZOrder、およびインスタンスが保持するオブジェクトの種類を示す Shape.IsGroup、Shape.IsImage、Shape.IsWordArt、Shape.IsInline フラグ。ShapeType 列挙体は、Word が認識する具体的なシェイプ種別(矩形、楕円、線、矢印、さまざまなコールアウトとコネクタタイプ、TextBox、画像、OleObject など、80 以上の値)を列挙します。これにより、ドキュメントのシェイプを走査するコードは Shape.ShapeType に基づいて分岐し、各シェイプの処理方法を決定できます。複数のシェイプは単一の GroupShape に結合でき、これは ShapeBase のサブクラスで、シェイプのセットを一緒に位置決め・サイズ変更できるようにします。DocumentBuilder.InsertGroupShape(shapes) は既存のシェイプ配列からそれを構築します。
テキスト ボックスと WordArt
任意の Shape は、TextBox クラスを介して独自のテキストを保持でき、Shape.TextBox として公開されます。TextBox プロパティは、テキストがシェイプ内にどのように配置されるかを制御します:パディング用の TextBox.InternalMarginLeft、TextBox.InternalMarginRight、TextBox.InternalMarginTop、および TextBox.InternalMarginBottom、コンテンツに合わせてシェイプを拡張するための TextBox.FitShapeToText、テキスト方向の LayoutFlow、ボックス内でのテキスト折り返し方法の TextBoxWrapMode、そして垂直位置揃えのための TextBox.VerticalAnchor — TextBoxAnchor 値で、Top、Middle、BottomCentered、または TopBaseline などがあります。テキストがはみ出した場合に 2 番目のボックスへ続くリンクテキストボックスは、TextBox.Next と TextBox.Previous でモデル化されます。関連していますが別のクラスである TextPath は、シェイプの内部ではなく輪郭に沿って配置される WordArt スタイルのテキストを定義し、TextPath.Text、TextPath.FontFamily、TextPath.Bold、TextPath.RotateLetters といったプロパティと、Stretch、Center、LetterJustify などの値を持つ TextPathAlignment 列挙型を備えています。
画像と埋め込み画像
シェイプが画像を保持している場合、Shape.HasImage は true で、Shape.ImageData は ImageData オブジェクトを返します。ImageData は ImageData.ImageBytes を通じて生バイトを公開し、ImageType で検出されたフォーマット(Jpeg、Png、Bmp、Gif、Emf、Wmf、Pict、Eps、WebP など)を取得し、ImageSize でピクセル寸法と解像度を提供し、ImageData.CropTop、ImageData.CropBottom、ImageData.CropLeft、ImageData.CropRight によってクロッピングを行います。カラー調整 — ImageData.Brightness、ImageData.Contrast、ImageData.GrayScale、ImageData.BiLevel、ImageData.ChromaKey — は同じオブジェクトのプロパティであり、ImageData.IsLink/ImageData.IsLinkOnly は埋め込み画像と外部ファイルパスのみを参照する画像を区別します。DocumentBuilder.InsertImage() には、画像、ファイルパス、バイト配列、またはストリームを受け取るオーバーロードがあり、さらに挿入時に明示的な幅、高さ、水平位置、垂直位置、および WrapType を設定するバリエーションもあります。
塗りつぶし、ストローク、シェイプ効果
すべての Shape と GroupShape は、内部用の Fill オブジェクトと輪郭用の Stroke オブジェクトを保持しています。Fill は FillType を通じて 6 種類の塗りつぶしをサポートし、Solid、Patterned、Gradient、Textured、Background、Picture などの値を持ち、Fill.Solid(color)、Fill.OneColorGradient(style, variant, degree)、Fill.TwoColorGradient(color1, color2, style, variant)、Fill.Patterned(patternType)、または Fill.SetImage(fileName) といったメソッドで設定します。Stroke は輪郭を制御し、Stroke.Weight、DashStyle、JoinStyle、EndCap、および Stroke.LineStyle(ShapeLineStyle 値)が線自体をカバーし、Stroke.StartArrowType と Stroke.EndArrowType は ArrowWidth と ArrowLength 列挙型と組み合わせてコネクタやラインシェイプの矢印ヘッドを設定します。塗りつぶしとストローク以外に、Shape はさらに 4 つのエフェクトオブジェクト — ShadowFormat、ReflectionFormat、GlowFormat、SoftEdgeFormat — を公開し、それぞれ対応する視覚効果の色と透明度プロパティを持ちます。
配置とテキスト折り返し
ページまたは段落に対して相対的に浮動するシェイプは、RelativeHorizontalPosition と RelativeVerticalPosition を使用して自身をアンカーします(例:余白、ページ、列など)。サイズのアンカーには RelativeHorizontalSize と RelativeVerticalSize を組み合わせ、左/中央/右または上/中/下の簡易配置には HorizontalAlignment と VerticalAlignment を使用します。シェイプに対する周囲テキストの反応は WrapType で制御され、Inline、Square、Tight、TopBottom、None などの値があります。Square と Tight の折り返しでは、WrapSide によって Left、Right、Both、Largest にさらに絞り込まれます。FlipOrientation は座標を変更せずにシェイプを水平または垂直に反転させ、Shape.AllowOverlap/Shape.BehindText フラグはシェイプが他の浮動コンテンツや下層のテキストレイヤーとどのように相互作用するかを制御します。
署名行と水平線
同じ描画モデルに、さらに2つの特殊な形状種が存在します。SignatureLineは、SignatureLineOptionsを介して挿入時に設定され(プロパティにはSignatureLineOptions.Signer、SignatureLineOptions.SignerTitle、SignatureLineOptions.Email、SignatureLineOptions.Instructions、SignatureLineOptions.ShowDate、SignatureLineOptions.AllowCommentsが含まれます)、印刷可能な文書で見られる視覚的な署名ブロックを描画し、署名が適用されるとSignatureLine.IsSignedとSignatureLine.IsValidを公開します――これは、形状自体ではなく署名された文書部分と連携する、他所で扱われている暗号的なデジタル署名検証とは別物です。HorizontalRuleFormatは、DocumentBuilder.InsertHorizontalRule()で挿入される単純な区切り線を扱い、HorizontalRuleFormat.WidthPercent、HorizontalRuleFormat.Height、HorizontalRuleFormat.NoShade、HorizontalRuleFormat.Color、HorizontalRuleFormat.Alignmentプロパティ(最後はHorizontalRuleAlignment値)を持ちます。
クイックスタート
Aspose.Words FOSS for .NET は NuGet 経由で利用可能です:
dotnet add package Aspose.Words.FOSS代わりにソースからビルドするには:
git clone https://github.com/aspose-words-foss/Aspose.Words-FOSS-for-.NET.git
cd Aspose.Words-FOSS-for-.NET
dotnet build Aspose.Words.sln -c Release
アプリケーションから Aspose.Words.csproj へのプロジェクト参照を追加します。そこから、描画レイヤーの操作は本記事全体で使用されているパターンに従います:Document をロードまたは作成し、Document.GetChildNodes(NodeType.Shape, true) でその形状を走査するか、DocumentBuilder メソッド(例: DocumentBuilder.InsertImage()、DocumentBuilder.InsertGroupShape()、DocumentBuilder.InsertHorizontalRule())で新しい形状を挿入し、返された Shape のプロパティを読み取るか設定します — Shape.ImageData、Shape.TextBox、Shape.Fill、Shape.Stroke、Shape.WrapType、その他 — 最後に Document.Save() を呼び出します。
サポートされているフォーマット
| 形式 | 拡張子 | 読み取り | 書き込み |
|---|---|---|---|
| DOCX | .docx | ✓ | ✓ |
| DOCM | .docm | ✓ | ✓ |
| DOTX | .dotx | ✓ | ✓ |
| DOTM | .dotm | ✓ | ✓ |
| Flat OPC (すべてのバリエーション) | (様々) | ✓ | ✓ |
| Markdown | .md | ✓ | ✓ |
| Text | .txt | ✓ | ✓ |
このエディションは意図的にページレイアウトとレンダリングを除外しています — PDF、XPS、画像エクスポートはなく、印刷もできません — そのためシェイプの Shape.Bounds とレイアウト依存のジオメトリは、計算されたページレイアウトではなく、ドキュメントに保存された値を反映します。追加のフォーマットコンバータ(DOC、RTF、ODT、HTML、EPUB、MHTML、MOBI、AZW3、WordML)は読み書きできません。これらは、このエディションを無料に保つために商用コードベースから削除されたのと同じサブシステムです。
オープンソース & ライセンス
Aspose.Words FOSS for .NET は MIT ライセンスの下でリリースされており、商用・個人利用ともにロイヤリティや再配布制限なしで無料です。完全なソースは GitHub の Aspose.Words FOSS for .NET リポジトリ にあります。