Word 文書に画像を挿入することは、文書の視覚的な訴求力を高めたり、テキストだけでは伝わりにくい情報を補足したりする手段の一つです。報告書やマニュアル、プレゼンテーション資料など、さまざまな文書で画像が使用されています。プログラムによって文書を自動生成する際に、画像の挿入も併せて処理できると、作業の効率化につながります。
本記事では、Spire.Doc for C++ を使用して、C++ で Word 文書に画像を挿入する方法を紹介します。Spire.Doc for C++ は、Microsoft Office に依存せず Word 文書の読み込み、編集、保存を行える C++ ライブラリです。
環境構築
Spire.Doc for C++ をプロジェクトに導入する方法は主に2つあります。
-
NuGet 経由でのインストール: Visual Studio の「NuGet パッケージの管理」から
spire.doc.cppを検索してインストールします。 - 手動での追加: パッケージをダウンロードし、ヘッダーファイルとライブラリファイルをプロジェクトに手動で追加します。
導入後、以下のようにヘッダーファイルをインクルードして使用します。
#include "Spire.Doc.o.h"
基本的な画像の挿入
Paragraph->AppendPicture() メソッドを使用すると、段落内に画像を挿入できます。以下のコードは、文書に段落を追加し、その段落に画像を挿入する例です。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
// Document インスタンスを生成
intrusive_ptr<Document> doc = new Document();
// セクションを追加
intrusive_ptr<Section> section = doc->AddSection();
// 段落を追加
intrusive_ptr<Paragraph> paragraph = section->AddParagraph();
paragraph->AppendText(L"以下はサンプル画像です。");
// 画像を段落に追加
intrusive_ptr<DocPicture> picture = paragraph->AppendPicture(L"sample.jpg");
// 画像のサイズを設定
picture->SetWidth(200);
picture->SetHeight(150);
// 保存
doc->SaveToFile(L"InsertImage.docx", FileFormat::Docx2013);
doc->Close();
}
AppendPicture メソッドには画像ファイルのパスを指定します。JPEG、PNG、BMP などの一般的な画像形式に対応しています。SetWidth および SetHeight メソッドで画像の表示サイズをポイント単位で指定できます。
既存の文書に画像を追加する
既存の Word 文書を読み込み、特定の段落に画像を追加することも可能です。以下の例では、既存の文書の最終段落に画像を挿入しています。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
// 既存の文書を読み込み
intrusive_ptr<Document> doc = new Document();
doc->LoadFromFile(L"ExistingDocument.docx");
// 最後のセクションを取得
intrusive_ptr<Section> lastSection = doc->GetLastSection();
// 新しい段落を追加して画像を挿入
intrusive_ptr<Paragraph> paragraph = lastSection->AddParagraph();
intrusive_ptr<DocPicture> picture = paragraph->AppendPicture(L"new_image.png");
picture->SetWidth(300);
picture->SetHeight(200);
// 保存
doc->SaveToFile(L"AddImageToExisting.docx", FileFormat::Docx2013);
doc->Close();
}
画像の位置とテキストの回り込みを設定する
画像を挿入する際、文書内の特定の位置に配置したり、テキストの回り込みスタイルを設定したりすることもできます。SetHorizontalPosition、SetVerticalPosition、SetTextWrappingStyle メソッドを使用します。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
intrusive_ptr<Document> doc = new Document();
intrusive_ptr<Section> section = doc->AddSection();
// テキスト用の段落を追加
intrusive_ptr<Paragraph> para = section->AddParagraph();
para->AppendText(L"この文書には、指定した位置に画像が配置されています。"
L"テキストは画像の周りに回り込みます。");
// 画像を挿入
intrusive_ptr<DocPicture> picture = para->AppendPicture(L"sample.jpg");
picture->SetWidth(150);
picture->SetHeight(100);
// 画像の位置を設定
picture->SetHorizontalPosition(200.0F);
picture->SetVerticalPosition(100.0F);
// テキストの回り込みスタイルを設定
picture->SetTextWrappingStyle(TextWrappingStyle::Tight);
doc->SaveToFile(L"ImagePosition.docx", FileFormat::Docx2013);
doc->Close();
}
TextWrappingStyle には、Tight(文字列が画像の形状に沿って回り込む)、Square(四角形で回り込む)、Through(画像の空白部分にも文字列が入る)、Inline(行内画像として扱われる)などが指定できます。なお、位置設定は Inline スタイル時には適用されない点に注意してください。
画像の書式を設定する
DocPicture クラスには、画像の表示を調整するためのプロパティが用意されています。以下は、色設定の例です。
#include "Spire.Doc.o.h"
using namespace Spire::Doc;
int main()
{
intrusive_ptr<Document> doc = new Document();
intrusive_ptr<Section> section = doc->AddSection();
intrusive_ptr<Paragraph> para = section->AddParagraph();
// 画像を挿入
intrusive_ptr<DocPicture> picture = para->AppendPicture(L"sample.jpg");
picture->SetWidth(250);
picture->SetHeight(180);
// グレースケールに設定
picture->SetColor(Color::GetGray());
doc->SaveToFile(L"ImageFormatting.docx", FileFormat::Docx2013);
doc->Close();
}
SetColor(Color::GetGray()) でグレースケールに変換するほか、以下のような設定も可能です。
-
Color::GetBlackAndWhite(): 白黒表示 -
Color::GetDefault(): 元の色に戻す
注意点
-
Paragraph->AppendPicture()には、画像ファイルのパスを直接指定する方法と、Imageオブジェクトを指定する方法の2通りがあります。ファイルパスを指定する方法がより簡潔です。 - 画像サイズの指定はポイント単位です。1ポイントは約1/72インチ(約0.35mm)です。
- 挿入する画像の解像度が高い場合、ファイルサイズが大きくなる可能性があります。必要に応じて画像を事前に最適化することを検討してください。
- 本ライブラリは Microsoft Office のインストールを必要としませんが、商用利用の場合はライセンスが必要です。利用前にライセンス条項を確認してください。
おわりに
本記事では、Spire.Doc for C++ を用いて Word 文書に画像を挿入する方法として、基本的な挿入、既存文書への追加、位置とテキスト回り込みの設定、画像書式の設定を紹介しました。いずれも Paragraph->AppendPicture() で画像を挿入した後、必要に応じてサイズや位置、回り込みスタイルを設定する流れで実装できます。文書に画像を追加する処理が必要な場面で、一つの手段として参考にしてください。