DocumentBuilder を使用して文書要素を挿入します

DocumentBuilderは文書を変更するために使用されます。 この記事では、いくつかのタスクを実行する方法について説明します:

テキストの文字列を挿入する

ドキュメントに挿入する必要があるテキストの文字列をDocumentBuilder.Writeメソッドに渡すだけです。 テキストの書式設定はFontプロパティによって決まります。 このオブジェクトには、さまざまなフォント属性(フォント名、フォントサイズ、色など)が含まれています。 いくつかの重要なフォント属性は、直接アクセスできるようにDocumentBuilderプロパティでも表されます。 これらはブール値のプロパティFont.BoldFont.Italic、およびFont.Underlineです。

設定した文字書式は、ドキュメント内の現在の位置から挿入されたすべてのテキストに適用されます。

以下の例は、DocumentBuilderを使用して書式設定されたテキストを挿入します。

// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument();
// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Specify font formatting before adding text.
System::SharedPtr<Font> font = builder->get_Font();
font->set_Size(16);
font->set_Bold(true);
font->set_Color(System::Drawing::Color::get_Blue());
font->set_Name(u"Arial");
font->set_Underline(Underline::Dash);
builder->Write(u"Sample text.");
System::String outputPath = outputDataDir + u"WriteAndFont.doc";
doc->Save(outputPath);

段落の挿入

DocumentBuilder.Writelnは文書にもテキストの文字列を挿入しますが、それに加えて段落区切りを追加します。 現在のフォントの書式設定はDocumentBuilder.Fontプロパティでも指定され、現在の段落の書式設定はDocumentBuilder.ParagraphFormatプロパティで決定されます。 以下の例は、文書に段落を挿入する方法を示しています。

// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument();
// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Specify font formatting
System::SharedPtr<Font> font = builder->get_Font();
font->set_Size(16);
font->set_Bold(true);
font->set_Color(System::Drawing::Color::get_Blue());
font->set_Name(u"Arial");
font->set_Underline(Underline::Dash);
// Specify paragraph formatting
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat();
paragraphFormat->set_FirstLineIndent(8);
paragraphFormat->set_Alignment(ParagraphAlignment::Justify);
paragraphFormat->set_KeepTogether(true);
builder->Writeln(u"A whole paragraph.");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertParagraph.doc";
doc->Save(outputPath);

テーブルの挿入

DocumentBuilderを使用してテーブルを作成するための基本的なアルゴリズムは簡単です:

  1. DocumentBuilder.StartTableを使用してテーブルを開始します。
  2. DocumentBuilder.InsertCellを使用してセルを挿入します。 これにより、新しい行が自動的に開始されます。 必要に応じて、DocumentBuilder.CellFormatプロパティを使用してセルの書式を指定します。
  3. DocumentBuilderメソッドを使用してセルの内容を挿入します。
  4. 行が完了するまで、手順2と3を繰り返します。
  5. 現在の行を終了するにはDocumentBuilder.EndRowを呼び出します。 必要に応じて、DocumentBuilder.RowFormatプロパティを使用して行の書式を指定します。
  6. テーブルが完了するまで、手順2-5を繰り返します。
  7. テーブルの構築を終了するにはDocumentBuilder.EndTableを呼び出します。 適切なDocumentBuilderテーブルの作成方法については、以下で説明します。

テーブルの開始

DocumentBuilder.StartTableを呼び出すことは、テーブルを構築する最初のステップです。 セル内で呼び出すこともでき、その場合はネストされたテーブルを開始します。 次に呼び出すメソッドはDocumentBuilder.InsertCellです。

セルの挿入

DocumentBuilder->InsertCellを呼び出すと、新しいセルが作成され、DocumentBuilderクラスの他のメソッドを使用して追加したコンテンツが現在のセルに追加されます。 同じ行の新しいセルを開始するには、DocumentBuilder->InsertCellを再度呼び出します。 セルの書式設定を指定するには、DocumentBuilder.CellFormatプロパティを使用します。 テーブルセルのすべての書式設定を表すCellFormatオブジェクトを返します。

行を終了する

現在の行を終了するにはDocumentBuilder.EndRowを呼び出します。 その直後にDocumentBuilder->InsertCellを呼び出すと、テーブルは新しい行で続行されます。

行の書式設定を指定するには、DocumentBuilder.RowFormatプロパティを使用します。 テーブル行のすべての書式設定を表すRowFormatオブジェクトを返します。

テーブルの終了

現在のテーブルを終了するにはDocumentBuilder.EndTableを呼び出します。 このメソッドは、DocumentBuilder->EndRowが呼び出された後に一度だけ呼び出す必要があります。 呼び出されると、DocumentBuilder.EndTableはカーソルを現在のセルの外にテーブルの直後の位置に移動します。 次の例は、2行と2列を含む書式設定されたテーブルを作成する方法を示しています。

// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument();
// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Table> table = builder->StartTable();
// Insert a cell
builder->InsertCell();
// Use fixed column widths.
table->AutoFit(AutoFitBehavior::FixedColumnWidths);
builder->get_CellFormat()->set_VerticalAlignment(CellVerticalAlignment::Center);
builder->Write(u"This is row 1 cell 1");
// Insert a cell
builder->InsertCell();
builder->Write(u"This is row 1 cell 2");
builder->EndRow();
// Insert a cell
builder->InsertCell();
// Apply new row formatting
builder->get_RowFormat()->set_Height(100);
builder->get_RowFormat()->set_HeightRule(HeightRule::Exactly);
builder->get_CellFormat()->set_Orientation(TextOrientation::Upward);
builder->Writeln(u"This is row 2 cell 1");
// Insert a cell
builder->InsertCell();
builder->get_CellFormat()->set_Orientation(TextOrientation::Downward);
builder->Writeln(u"This is row 2 cell 2");
builder->EndRow();
builder->EndTable();
System::String outputPath = outputDataDir + u"DocumentBuilderBuildTable.doc";
doc->Save(outputPath);

休憩を挿入する

新しい行、段落、列、セクション、またはページを明示的に開始する場合は、DocumentBuilder.InsertBreakを呼び出します。 このメソッドに、BreakType列挙体で表される挿入する必要のあるブレークの型を渡します。 以下の例は、文書に改ページを挿入する方法を示しています。

// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument();
// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->Writeln(u"This is page 1.");
builder->InsertBreak(BreakType::PageBreak);
builder->Writeln(u"This is page 2.");
builder->InsertBreak(BreakType::PageBreak);
builder->Writeln(u"This is page 3.");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertBreak.doc";
doc->Save(outputPath);

画像の挿入

DocumentBuilderは、インラインまたはフローティングイメージを挿入できるDocumentBuilder->InsertImageメソッドのいくつかのオーバーロードを提供します。 画像がEMFまたはWMFメタファイルの場合は、メタファイル形式でドキュメントに挿入されます。 他のすべての画像はPNG形式で保存されます。 DocumentBuilder->InsertImageメソッドは、異なるソースからの画像を使用できます:

  • 文字列パラメータDocumentBuilder->InsertImageを渡すことにより、ファイルまたはURLから。
  • StreamパラメータDocumentBuilder->InsertImageを渡すことによってストリームから。
  • ImageパラメータDocumentBuilder->InsertImageを渡してImageオブジェクトから取得します。
  • バイト配列パラメータDocumentBuilder.InsertImageを渡すことにより、バイト配列から。DocumentBuilder->InsertImageメソッドごとに、次のオプションを使用して画像を挿入できるオーバーロードがさらにあります:
  • DocumentBuilder->InsertImageのように、特定の位置でインラインまたは浮動します。
  • パーセントスケールまたはカスタムサイズ(例:DocumentBuilder.InsertImage)。 さらに、DocumentBuilder->InsertImageメソッドは、シェイプのプロパティをさらに変更できるように、作成および挿入されたばかりのShapeオブジェクトを返します。

インラインイメージの挿入

画像を含むファイルを表す単一の文字列をDocumentBuilder->InsertImageに渡して、画像をインライングラフィックスとしてドキュメントに挿入します。 以下の例は、カーソル位置にインライン画像をドキュメントに挿入する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->InsertImage(inputDataDir + u"Watermark.png");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertImage.InsertInlineImage.doc";
doc->Save(outputPath);

フローティング(絶対配置)イメージの挿入

この例では、指定された位置とサイズのファイルまたはURLから浮動イメージを挿入します。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->InsertImage(inputDataDir + u"Watermark.png", RelativeHorizontalPosition::Margin, 100, RelativeVerticalPosition::Margin, 100, 200, 100, WrapType::Square);
System::String outputPath = outputDataDir + u"DocumentBuilderInsertImage.InsertFloatingImage.doc";
doc->Save(outputPath);

ブックマークの挿入

ドキュメントにブックマークを挿入するには、次の操作を行います:

  1. DocumentBuilder->StartBookmarkを呼び出して、ブックマークの目的の名前を渡します。
  2. DocumentBuilderメソッドを使用してブックマークテキストを挿入します。
  3. DocumentBuilder->StartBookmarkで使用したのと同じ名前を渡してDocumentBuilder.EndBookmarkを呼び出します。
  4. ブックマークは、任意の範囲に重複してまたがることができます。 有効なブックマークを作成するには、DocumentBuilder->StartBookmarkDocumentBuilder->EndBookmarkの両方を同じブックマーク名で呼び出す必要があります。

以下の例は、ドキュメントビルダーを使用してドキュメントにブックマークを挿入する方法を示しています。

// The path to the documents directory.
System::String outputDataDir = GetOutputDataDir_WorkingWithDocument();
// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->StartBookmark(u"FineBookmark");
builder->Writeln(u"This is just a fine bookmark.");
builder->EndBookmark(u"FineBookmark");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertBookmark.doc";
doc->Save(outputPath);

Formフィールドの挿入

フォームフィールドは、ユーザーとの"対話"を可能にする単語フィールドの特定のケースです。 Microsoft Wordのフォームフィールドには、textbox、combo box、checkboxが含まれます。DocumentBuilderは、DocumentBuilder.InsertTextInputDocumentBuilder->InsertCheckBoxDocumentBuilder.InsertComboBoxの各タイプのフォームフィールドをドキュメントに挿入するための特別なメソッドを提供します。 フォームフィールドに名前を指定すると、同じ名前のブックマークが自動的に作成されることに注意してください。

テキスト入力の挿入

DocumentBuilder.InsertTextInputテキストボックスを文書に挿入します。 以下の例は、文書にテキスト入力フォームフィールドを挿入する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->InsertTextInput(u"TextInput", TextFormFieldType::Regular, u"", u"Hello", 0);
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertTextInputFormField.doc";
doc->Save(outputPath);

チェックボックスの挿入

文書にチェックボックスを挿入するにはDocumentBuilder.InsertCheckBoxを呼び出します。 以下の例は、チェックボックスフォームフィールドをドキュメントに挿入する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->InsertCheckBox(u"CheckBox", true, true, 0);
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertCheckBoxFormField.doc";
doc->Save(outputPath);

コンボボックスの挿入

ドキュメントにコンボボックスを挿入するにはDocumentBuilder.InsertComboBoxを呼び出します。 以下の例は、コンボボックスフォームフィールドをドキュメントに挿入する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::ArrayPtr<System::String> items = System::MakeArray<System::String>({u"One", u"Two", u"Three"});
builder->InsertComboBox(u"DropDown", items, 0);
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertComboBoxFormField.doc";
doc->Save(outputPath);

フィールドレベルでのロケールの挿入

顧客は今、フィールドレベルでロケールを指定することができ、より良い制御を達成することができます。 ロケールIdはDocumentBuilder内の各フィールドに関連付けることができます。 以下の例は、このオプションを使用する方法を示しています。

System::String outputDataDir = GetOutputDataDir_WorkingWithFields();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>();
System::SharedPtr<Field> field = builder->InsertField(FieldType::FieldDate, true);
field->set_LocaleId(1049);
builder->get_Document()->Save(outputDataDir + u"SpecifylocaleAtFieldlevel.docx");

ハイパーリンクの挿入

ドキュメントにハイパーリンクを挿入するにはDocumentBuilder.InsertHyperlinkを使用します。 このメソッドは、ドキュメント内に表示されるリンクのテキスト、リンク先(URLまたはドキュメント内のブックマークの名前)、およびURLがドキュメント内のブックマークの名前である場合にtrueにする必要があるbooleanパラメータの三つのパラメータを受け入れます。DocumentBuilder.InsertHyperlinkは内部的にDocumentBuilder.InsertFieldを呼び出します。このメソッドは、常にURLの先頭と末尾にアポストロフィを追加します。 Fontプロパティを使用して、ハイパーリンク表示テキストのフォント書式を明示的に指定する必要があることに注意してください。 以下の例では、DocumentBuilderを使用して文書にハイパーリンクを挿入します。

Oleオブジェクトの挿入

Oleオブジェクトが必要な場合はDocumentBuilder.InsertOleObjectを呼び出します。 このメソッドにProgIdを他のパラメータとともに明示的に渡します。 以下の例は、Oleオブジェクトをドキュメントに挿入する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->InsertOleObject(u"http://www.aspose.com", u"htmlfile", true, true, nullptr);
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertOleObject.doc";
doc->Save(outputPath);

Oleオブジェクトを挿入するときにファイル名と拡張子を設定する

OLEパッケージは、oleハンドラーが不明な場合に埋め込まれたオブジェクトを格納するためのレガシーで「文書化されていない」方法です。 Windows3.1、95、98などの初期のWindowsバージョンにはパッケージャがありました。文書にデータの任意のタイプを埋め込むために使用することができるexeアプリケーション。 現在、このアプリケーションはWindowsから除外されていますが、MS Wordや他のアプリケーションでは、OLEハンドラーが欠落しているか不明な場合にデータを埋め込 OlePackageクラスはOLEパッケージのプロパティにアクセスできます。 以下の例は、OLEパッケージのファイル名、拡張子、表示名を設定する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::ArrayPtr<uint8_t> bs = System::IO::File::ReadAllBytes(inputDataDir + u"input.zip");
System::SharedPtr<System::IO::Stream> stream = System::MakeObject<System::IO::MemoryStream>(bs);
System::SharedPtr<Shape> shape = builder->InsertOleObject(stream, u"Package", true, nullptr);
System::SharedPtr<OlePackage> olePackage = shape->get_OleFormat()->get_OlePackage();
olePackage->set_FileName(u"filename.zip");
olePackage->set_DisplayName(u"displayname.zip");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertOleObjectwithOlePackage.doc";
doc->Save(outputPath);

HTMLの挿入

HtmlフラグメントまたはHTML文書全体を含むHTML文字列をWord文書に簡単に挿入できます。 この文字列をDocumentBuilder->InsertHtmlメソッドに渡すだけです。 このメソッドの便利な実装の1つは、html文字列をデータベースに格納し、mail merge中にドキュメントに挿入して、ドキュメントビルダーのさまざまなメソッドを使用して作成するのではなく、書式設定されたコンテンツを追加することです。 以下の例は、DocumentBuilderを使用して文書にHTMLを挿入することを示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->InsertHtml(u"<P align='right'>Paragraph right</P><b>Implicit paragraph left</b><div align='center'>Div center</div><h1 align='left'>Heading 1 left.</h1>");
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertHtml.doc";
doc->Save(outputPath);

水平ルールを文書に挿入する

Below codeの例では、DocumentBuilder->InsertHorizontalRuleメソッドを使用して水平ルール形状を文書に挿入する方法を示しています。

// Initialize document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->Writeln(u"Insert a horizontal rule shape into the document.");
builder->InsertHorizontalRule();
System::String outputPath = outputDataDir + u"DocumentBuilderInsertHorizontalRule.doc";
doc->Save(outputPath);