DocumentBuilder を使用して文書要素を挿入します
DocumentBuilder
は文書を変更するために使用されます。 この記事では、いくつかのタスクを実行する方法について説明します:
テキストの文字列を挿入する
ドキュメントに挿入する必要があるテキストの文字列をDocumentBuilder.Write
メソッドに渡すだけです。 テキストの書式設定はFont
プロパティによって決まります。 このオブジェクトには、さまざまなフォント属性(フォント名、フォントサイズ、色など)が含まれています。 いくつかの重要なフォント属性は、直接アクセスできるようにDocumentBuilderプロパティでも表されます。 これらはブール値のプロパティFont.Bold
、Font.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を使用してテーブルを作成するための基本的なアルゴリズムは簡単です:
DocumentBuilder.StartTable
を使用してテーブルを開始します。DocumentBuilder.InsertCell
を使用してセルを挿入します。 これにより、新しい行が自動的に開始されます。 必要に応じて、DocumentBuilder.CellFormat
プロパティを使用してセルの書式を指定します。DocumentBuilder
メソッドを使用してセルの内容を挿入します。- 行が完了するまで、手順2と3を繰り返します。
- 現在の行を終了するには
DocumentBuilder.EndRow
を呼び出します。 必要に応じて、DocumentBuilder.RowFormat
プロパティを使用して行の書式を指定します。 - テーブルが完了するまで、手順2-5を繰り返します。
- テーブルの構築を終了するには
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); |
ブックマークの挿入
ドキュメントにブックマークを挿入するには、次の操作を行います:
DocumentBuilder->StartBookmark
を呼び出して、ブックマークの目的の名前を渡します。- DocumentBuilderメソッドを使用してブックマークテキストを挿入します。
- DocumentBuilder->StartBookmarkで使用したのと同じ名前を渡して
DocumentBuilder.EndBookmark
を呼び出します。 - ブックマークは、任意の範囲に重複してまたがることができます。 有効なブックマークを作成するには、
DocumentBuilder->StartBookmark
とDocumentBuilder->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.InsertTextInput
、DocumentBuilder->InsertCheckBox
、DocumentBuilder.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を使用して文書にハイパーリンクを挿入します。
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Write(u"Please make sure to visit "); | |
// Specify font formatting for the hyperlink. | |
builder->get_Font()->set_Color(System::Drawing::Color::get_Blue()); | |
builder->get_Font()->set_Underline(Underline::Single); | |
// Insert the link. | |
builder->InsertHyperlink(u"Aspose Website", u"http://www.aspose.com", false); | |
// Revert to default formatting. | |
builder->get_Font()->ClearFormatting(); | |
builder->Write(u" for more information."); | |
System::String outputPath = outputDataDir + u"DocumentBuilderInsertElements.InsertHyperlink.doc"; | |
doc->Save(outputPath); |
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); |