DocumentBuilder を使用して文書を簡単に変更する

書式の指定

フォントの書式設定

現在のフォントの書式は、DocumentBuilder.Fontプロパティによって返されるFontオブジェクトで表されます。 Fontクラスには、Microsoft Wordで可能なさまざまなフォントプロパティが含まれています。 以下の例は、フォントの書式設定を設定する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set font formatting properties
System::SharedPtr<Font> font = builder->get_Font();
font->set_Bold(true);
font->set_Color(System::Drawing::Color::get_DarkBlue());
font->set_Italic(true);
font->set_Name(u"Arial");
font->set_Size(24);
font->set_Spacing(5);
font->set_Underline(Underline::Double);
// Output formatted text
builder->Writeln(u"I'm a very nice formatted string.");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetFontFormatting.doc";
doc->Save(outputPath);

段落の書式設定

現在の段落の書式設定は、DocumentBuilder.ParagraphFormatプロパティによって返されるParagraphFormatオブジェクトによって表されます。 このオブジェクトはMicrosoft Wordで利用可能な様々な段落書式設定プロパティをカプセル化します。 ParagraphFormat.ClearFormattingを呼び出すことで、段落の書式をデフォルトの通常のスタイル、左揃え、インデントなし、間隔なし、境界線なし、陰影なしに簡単にリセットできます。 以下の例は、段落の書式設定を設定する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph formatting properties
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat();
paragraphFormat->set_Alignment(ParagraphAlignment::Center);
paragraphFormat->set_LeftIndent(50);
paragraphFormat->set_RightIndent(50);
paragraphFormat->set_SpaceAfter(25);
// Output text
builder->Writeln(u"I'm a very nice formatted paragraph. I'm intended to demonstrate how the left and right indents affect word wrapping.");
builder->Writeln(u"I'm another nice formatted paragraph. I'm intended to demonstrate how the space after paragraph looks like.");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetParagraphFormatting.doc";
doc->Save(outputPath);

アジアのタイポグラフィを扱う

アジアとラテンのテキスト、数字の間のスペースを自動的に調整します

東アジアとラテン語の両方のテキストを含むテンプレートを設計していて、両方のタイプのテキスト間のスペースを制御してフォームテンプレートの外観を向上させたい場合は、これらの2つのタイプのテキスト間のスペースを自動的に調整するようにフォームテンプレートを構成できます。 これを実現するには、ParagraphFormatクラスのAddSpaceBetweenFarEastAndAlphaプロパティとAddSpaceBetweenFarEastAndDigitプロパティを使用できます。

次のコード例は、ParagraphFormat.AddSpaceBetweenFarEastAndAlphaおよびParagraphFormat.AddSpaceBetweenFarEastAndDigitプロパティの使用方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph formatting properties
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat();
paragraphFormat->set_AddSpaceBetweenFarEastAndAlpha(true);
paragraphFormat->set_AddSpaceBetweenFarEastAndDigit(true);
builder->Writeln(u"Automatically adjust space between Asian and Latin text");
builder->Writeln(u"Automatically adjust space between Asian text and numbers");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetSpacebetweenAsianandLatintext.doc";
doc->Save(outputPath);

アジアの段落の間隔とインデントを変更する

次のコード例は、アジアの段落の間隔とインデントを変更する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph formatting properties
System::SharedPtr<ParagraphFormat> paragraphFormat = builder->get_ParagraphFormat();
paragraphFormat->set_AddSpaceBetweenFarEastAndAlpha(true);
paragraphFormat->set_AddSpaceBetweenFarEastAndDigit(true);
builder->Writeln(u"Automatically adjust space between Asian and Latin text");
builder->Writeln(u"Automatically adjust space between Asian text and numbers");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetSpacebetweenAsianandLatintext.doc";
doc->Save(outputPath);

改行オプションの設定

MS WordのParagraphプロパティダイアログのアジアのタイポグラフィタブには改行グループがあります。 このグループのオプションは、以下を使用して設定できますFarEastLineBreakControl, WordWrap, HangingPunctuation ParagraphFormatクラスのプロパティ。 Below codeの例は、これらのプロパティの使用方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Input.docx");
System::SharedPtr<ParagraphFormat> format = doc->get_FirstSection()->get_Body()->get_Paragraphs()->idx_get(0)->get_ParagraphFormat();
format->set_FarEastLineBreakControl(false);
format->set_WordWrap(true);
format->set_HangingPunctuation(false);
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetAsianTypographyLinebreakGroupProp.docx";
doc->Save(outputPath);

セルの書式設定

セルの書式設定は、テーブルの構築中に使用されます。 これは、DocumentBuilder.CellFormatプロパティによって返されるCellFormatオブジェクトによって表されます。 CellFormat幅や垂直方向の配置など、さまざまなテーブルセルプロパティをカプセル化します。 以下の例は、単一の書式設定されたセルを含むテーブルを作成する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->StartTable();
builder->InsertCell();
// Set the cell formatting
System::SharedPtr<CellFormat> cellFormat = builder->get_CellFormat();
cellFormat->set_Width(250);
cellFormat->set_LeftPadding(30);
cellFormat->set_RightPadding(30);
cellFormat->set_TopPadding(30);
cellFormat->set_BottomPadding(30);
builder->Writeln(u"I'm a wonderful formatted cell.");
builder->EndRow();
builder->EndTable();
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetTableCellFormatting.doc";
doc->Save(outputPath);

行の書式設定

現在の行の書式設定は、DocumentBuilder.RowFormatプロパティによって返されるRowFormatオブジェクトによって決定されます。 このオブジェクトは、すべての表の行の書式設定に関する情報をカプセル化します。 以下の例は、単一のセルを含むテーブルを作成し、行の書式設定を適用する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Table> table = builder->StartTable();
builder->InsertCell();
// Set the row formatting
System::SharedPtr<RowFormat> rowFormat = builder->get_RowFormat();
rowFormat->set_Height(100);
rowFormat->set_HeightRule(HeightRule::Exactly);
// These formatting properties are set on the table and are applied to all rows in the table.
table->set_LeftPadding(30);
table->set_RightPadding(30);
table->set_TopPadding(30);
table->set_BottomPadding(30);
builder->Writeln(u"I'm a wonderful formatted row.");
builder->EndRow();
builder->EndTable();
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetTableRowFormatting.doc";
doc->Save(outputPath);

リストの書式設定

Aspose.Wordsリストの書式設定を適用することで、リストを簡単に作成できます。 DocumentBuilderはListFormatオブジェクトを返すDocumentBuilder.ListFormatプロパティを提供します。 このオブジェクトには、リストの開始と終了、およびインデントの増減を行ういくつかのメソッドがあります。 Microsoft Wordには、箇条書きと番号付きの2つの一般的なタイプのリストがあります。

  • 箇条書きリストを開始するには、ListFormat.ApplyBulletDefaultを呼び出します。
  • 番号付きリストを開始するには、ListFormat.ApplyNumberDefaultを呼び出します。

箇条書きまたは番号と書式設定は現在の段落に追加され、DocumentBuilderを使用して作成された以降のすべての段落はListFormat.RemoveNumbersが呼び出されて箇条書きリストの書式 Word文書では、リストは最大9つのレベルで構成されています。 各レベルのリストの書式設定は、使用される箇条書きまたは番号、左インデント、箇条書きとテキストの間のスペースなどを指定します。

  • 現在の段落のリストレベルを1レベル上げるには、ListFormat.ListIndentを呼び出します。
  • 現在の段落のリストレベルを1レベル下げるには、ListFormat.ListOutdentを呼び出します。

これらのメソッドは、リストレベルを変更し、新しいレベルの書式設定プロパティを適用します。

以下の例は、マルチレベルリストを構築する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->get_ListFormat()->ApplyNumberDefault();
builder->Writeln(u"Item 1");
builder->Writeln(u"Item 2");
builder->get_ListFormat()->ListIndent();
builder->Writeln(u"Item 2.1");
builder->Writeln(u"Item 2.2");
builder->get_ListFormat()->ListIndent();
builder->Writeln(u"Item 2.2.1");
builder->Writeln(u"Item 2.2.2");
builder->get_ListFormat()->ListOutdent();
builder->Writeln(u"Item 2.3");
builder->get_ListFormat()->ListOutdent();
builder->Writeln(u"Item 3");
builder->get_ListFormat()->RemoveNumbers();
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetMultilevelListFormatting.doc";
doc->Save(outputPath);

ページの設定とセクションの書式設定

ページ設定とセクションプロパティはDocumentBuilder.PageSetupプロパティによって返されるPageSetupオブジェクトにカプセル化されます。 このオブジェクトには、セクションのすべてのページ設定属性(左余白、下余白、用紙サイズなど)がプロパティとして含まれます。 以下の例は、現在のセクションのページサイズや向きなどのプロパティを設定する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set page properties
builder->get_PageSetup()->set_Orientation(Orientation::Landscape);
builder->get_PageSetup()->set_LeftMargin(50);
builder->get_PageSetup()->set_PaperSize(PaperSize::Paper10x14);
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.SetPageSetupAndSectionFormatting.doc";
doc->Save(outputPath);

スタイルの適用

フォントやParagraphFormatのような一部の書式設定オブジェクトはスタイルをサポートしています。 単一の組み込みまたはユーザー定義のスタイルは、名前、基本スタイル、フォント、スタイルの段落書式などの対応するスタイルプロパティを含むStyleオブジ

さらに、Styleオブジェクトは、Style.StyleIdentifier列挙値によって表されるロケールに依存しないスタイル識別子を返すStyle.StyleIdentifierプロパティを提供します。 重要なのは、Microsoft Wordの組み込みスタイルの名前が異なる言語にローカライズされていることです。 スタイル識別子を使用すると、文書の言語に関係なく正しいスタイルを見つけることができます。 列挙値は、Normal、Heading1、Heading2などの組み込みスタイルMicrosoft Wordに対応しています。 すべてのユーザー定義スタイルにはStyleIdentifier.User valueが割り当てられます。 以下の例は、段落スタイルを適用する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph style
builder->get_ParagraphFormat()->set_StyleIdentifier(StyleIdentifier::Title);
builder->Write(u"Hello");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.ApplyParagraphStyle.doc";
doc->Save(outputPath);

境界線とシェーディング

境界線はBorderCollectionで表されます。 これは、インデックスまたは境界線の種類によってアクセスされるBorderオブジェクトのコレクションです。 境界線の型はBorderType列挙体で表されます。 列挙体の一部の値は、複数または1つのドキュメント要素にのみ適用できます。 たとえば、BorderType.Bottomは段落または表のセルに適用できますが、BorderType.DiagonalDownは表のセル内の対角線の境界線のみを指定します。

Borderコレクションとそれぞれの境界線の両方に、色、線のスタイル、線の幅、テキストからの距離、オプションの影などの同様の属性があります。 それらは同じ名前のプロパティによって表されます。 プロパティ値を組み合わせることで、さまざまな境界線の種類を実現できます。 さらに、BorderCollectionオブジェクトとBorderオブジェクトの両方で、Border.ClearFormattingメソッドを呼び出すことでこれらの値をデフォルトにリセットできます。 境界線のプロパティがデフォルト値にリセットされると、境界線は非表示になります。 Shadingクラスには、文書要素のシェーディング属性が含まれています。 必要なシェーディングテクスチャと、要素の背景と前景に適用される色を設定できます。

シェーディングテクスチャは、Shadingオブジェクトにさまざまなパターンを適用できるTextureIndex列挙値で設定されます。 たとえば、ドキュメント要素の背景色を設定するには、TextureIndex.TextureSolidの値を使用し、必要に応じて前景の陰影の色を設定します。 下の例は、段落に境界線と陰影を適用する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Set paragraph borders
System::SharedPtr<BorderCollection> borders = builder->get_ParagraphFormat()->get_Borders();
borders->set_DistanceFromText(20);
borders->idx_get(BorderType::Left)->set_LineStyle(LineStyle::Double);
borders->idx_get(BorderType::Right)->set_LineStyle(LineStyle::Double);
borders->idx_get(BorderType::Top)->set_LineStyle(LineStyle::Double);
borders->idx_get(BorderType::Bottom)->set_LineStyle(LineStyle::Double);
// Set paragraph shading
System::SharedPtr<Shading> shading = builder->get_ParagraphFormat()->get_Shading();
shading->set_Texture(TextureIndex::TextureDiagonalCross);
shading->set_BackgroundPatternColor(System::Drawing::Color::get_LightCoral());
shading->set_ForegroundPatternColor(System::Drawing::Color::get_LightSalmon());
builder->Write(u"I'm a formatted paragraph with double border and nice shading.");
System::String outputPath = outputDataDir + u"DocumentBuilderSetFormatting.ApplyBordersAndShadingToParagraph.doc";
doc->Save(outputPath);

グリッドにスナップ

Aspose.Wordsは、段落プロパティスナップをグリッドに取得および設定するための二つのプロパティParagraphFormat.SnapToGridFont.SnapToGridを提供します。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Input.docx");
System::SharedPtr<Paragraph> par = doc->get_FirstSection()->get_Body()->get_FirstParagraph();
par->get_ParagraphFormat()->set_SnapToGrid(true);
par->get_Runs()->idx_get(0)->get_Font()->set_SnapToGrid(true);
const System::String outputPath = outputDataDir + u"SetSnapToGrid_out.doc";
doc->Save(outputPath);

カーソルの移動

現在のカーソル位置の検出

Builderのカーソルが現在位置している場所はいつでも取得できます。 DocumentBuilder.CurrentNodeプロパティは、このビルダーで現在選択されているノードを返します。 ノードは段落の直接の子です。 DocumentBuilderを使用して実行する挿入操作は、DocumentBuilder.CurrentNodeの前に挿入されます。 現在の段落が空の場合、またはカーソルが段落の終わりの直前に配置されている場合、DocumentBuilder.CurrentNodeはnullを返します。

また、このDocumentBuilderで現在選択されている段落を取得するDocumentBuilder.CurrentParagraphプロパティを使用することもできます。 以下の例は、ドキュメントビルダーで現在のノードにアクセスする方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

// Shows how to access the current node in a document builder.
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<Node> curNode = builder->get_CurrentNode();
System::SharedPtr<Paragraph> curParagraph = builder->get_CurrentParagraph();

任意のノード(段落とその子)への移動

段落または段落の直接の子であるドキュメントオブジェクトノードがある場合は、ビルダーのカーソルをこのノードにポイントできます。 これを実行するにはDocumentBuilder.MoveToメソッドを使用します。 以下の例は、カーソル位置を指定したノードに移動する方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->MoveTo(doc->get_FirstSection()->get_Body()->get_LastParagraph());

ドキュメントの開始/終了への移動

文書の先頭に移動する必要がある場合は、DocumentBuilder.MoveToDocumentStartを呼び出します。 文書の最後に移動する必要がある場合は、DocumentBuilder.MoveToDocumentEndを呼び出します。 以下の例は、カーソル位置を文書の先頭または末尾に移動する方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->MoveToDocumentEnd();
std::cout << "This is the end of the document." << std::endl;
builder->MoveToDocumentStart();
std::cout << "This is the beginning of the document." << std::endl;

セクションへの移動

複数のセクションを含むドキュメントを操作している場合は、DocumentBuilder.MoveToSectionを使用して目的のセクションに移動できます。 このメソッドは、指定されたセクションの先頭にカーソルを移動し、必要なセクションのインデックスを受け入れます。 セクションインデックスが0以上の場合、文書の先頭からのインデックスを指定し、0が最初のセクションになります。 セクションインデックスが0より小さい場合、ドキュメントの末尾からのインデックスを指定し、最後のセクションを-1とします。 以下の例は、指定されたセクションにカーソル位置を移動する方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Parameters are 0-index. Moves to third section.
builder->MoveToSection(2);
builder->Writeln(u"This is the 3rd section.");

ヘッダー/フッターへの移動

ヘッダーまたはフッターにデータを配置する必要がある場合は、最初にDocumentBuilder.MoveToHeaderFooterを使用してそこに移動する必要があります。 このメソッドは、カーソルを移動するヘッダーまたはフッターのタイプを識別するHeaderFooterType列挙値を受け入れます。 最初のページで異なるヘッダーとフッターを作成する場合は、PageSetup.DifferentFirstPageHeaderFooterプロパティをtrueに設定する必要があります。 偶数ページと奇数ページで異なるヘッダーとフッターを作成する場合は、PageSetup.OddAndEvenPagesHeaderFootertrueに設定する必要があります。

メインストーリーに戻る必要がある場合は、DocumentBuilder.MoveToSectionを使用してヘッダーまたはフッターから移動します。 以下の例では、DocumentBuilderを使用してドキュメント内にヘッダーとフッターを作成します。

// Create a blank document.
System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Specify that we want headers and footers different for first, even and odd pages.
builder->get_PageSetup()->set_DifferentFirstPageHeaderFooter(true);
builder->get_PageSetup()->set_OddAndEvenPagesHeaderFooter(true);
// Create the headers.
builder->MoveToHeaderFooter(HeaderFooterType::HeaderFirst);
builder->Write(u"Header First");
builder->MoveToHeaderFooter(HeaderFooterType::HeaderEven);
builder->Write(u"Header Even");
builder->MoveToHeaderFooter(HeaderFooterType::HeaderPrimary);
builder->Write(u"Header Odd");
// Create three pages in the document.
builder->MoveToSection(0);
builder->Writeln(u"Page1");
builder->InsertBreak(BreakType::PageBreak);
builder->Writeln(u"Page2");
builder->InsertBreak(BreakType::PageBreak);
builder->Writeln(u"Page3");
System::String outputPath = outputDataDir + u"DocumentBuilderMovingCursor.HeadersAndFooters.doc";
doc->Save(outputPath);

段落への移動

現在のセクションの目的の段落にカーソルを移動するには、DocumentBuilder.MoveToParagraphを使用します。 このメソッドには、paragraphIndex(移動先の段落のインデックス)とcharacterIndex(段落内の文字のインデックス)の二つのパラメータを渡す必要があります。

ナビゲーションは、現在のセクションの現在のストーリー内で実行されます。 つまり、カーソルを最初のセクションのプライマリヘッダーに移動した場合、paragraphIndexはそのセクションのそのヘッダー内の段落のインデックスを指定します。

ParagraphIndexが0以上の場合、セクションの先頭からのインデックスを指定し、0が最初の段落になります。paragraphIndexが0以上の場合、セクションの先頭からのインデックスを指定します。 paragraphIndexが0より小さい場合は、セクションの最後からのインデックスを指定し、-1が最後の段落になります。

文字インデックスは、現在、段落の先頭に移動するには0、段落の末尾に移動するには-1としてのみ指定できます。 以下の例は、指定された段落にカーソル位置を移動する方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// Parameters are 0-index. Moves to third paragraph.
builder->MoveToParagraph(2, 0);
builder->Writeln(u"This is the 3rd paragraph.");

テーブルセルへの移動

現在のセクションのテーブルセルにカーソルを移動する必要がある場合はDocumentBuilder.MoveToCellを使用します。 このメソッドは、次の4つのパラメータを受け入れます:

  • tableIndex-移動先のテーブルのインデックス。
  • rowIndex-テーブル内の行のインデックス。
  • columnIndex-テーブル内の列のインデックス。
  • characterIndex-セル内の文字のインデックス。

ナビゲーションは、現在のセクションの現在のストーリー内で実行されます。 Indexパラメータの場合、indexが0以上の場合、最初の要素である0で先頭からインデックスを指定します。 Indexが0より小さい場合、末尾からのインデックスを指定し、-1が最後の要素になります。

また、characterIndexは現在、セルの先頭に移動するには0、セルの末尾に移動するには-1しか指定できないことに注意してください。 以下の例は、指定されたテーブルセルにカーソル位置を移動する方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
// All parameters are 0-index. Moves to the 2nd table, 3rd row, 5th cell.
builder->MoveToCell(1, 2, 4, 0);
builder->Writeln(u"Hello World!");

ブックマークへの移動

ブックマークは、新しい要素が挿入される文書内の特定の場所をマークするために頻繁に使用されます。 ブックマークに移動するには、DocumentBuilder.MoveToBookmarkを使用します。 このメソッドには2つのオーバーロードがあります。 最も単純なものは、カーソルが移動されるブックマークの名前だけを受け入れます。 以下の例は、カーソル位置をブックマークに移動する方法を示しています。 この例のテンプレートファイルはこちらからダウンロードできます。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->MoveToBookmark(u"CoolBookmark");
builder->Writeln(u"This is a very cool bookmark.");

このオーバーロードは、指定された名前のブックマークの開始直後の位置にカーソルを移動します。 別のオーバーロードDocumentBuilder.MoveToBookmarkは、カーソルをより高い精度でブックマークに移動します。 2つの追加のブールパラメータを受け入れます:

  • isStartカーソルをブックマークの先頭に移動するか末尾に移動するかを指定します。
  • isAfterカーソルをブックマークの開始位置または終了位置の後に移動するか、ブックマークの開始位置または終了位置の前に移動するかを決定します。

以下の例では、ブックマークの終了直後にカーソル位置を移動する方法を示しています。

System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"DocumentBuilder.doc");
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
builder->MoveToBookmark(u"CoolBookmark", false, true);
builder->Writeln(u"This is a very cool bookmark.");

両方の方法の比較では、大文字と小文字は区別されません。

この方法で新しいテキストを挿入しても、ブックマークの既存のテキストは置き換えられません。 ドキュメント内のブックマークの中には、フォームフィールドに割り当てられているものがあります。 そのようなブックマークに移動してテキストを挿入すると、テキストがフォームフィールドコードに挿入されます。 これによりフォームフィールドが無効になることはありませんが、挿入されたテキストはフィールドコードの一部になるため表示されません。

測定単位間で変換する方法

Aspose.Words API で提供される、何らかの測定値 (幅/高さ、余白、さまざまな距離) を表すオブジェクト プロパティのほとんどは、ポイント単位の値を受け入れます (1 インチは 72 ポイントに相当)。これが不便な場合もあるため、さまざまな測定単位を変換するためのヘルパー関数を提供する ConvertUtil クラスがあります。これにより、インチをポイントに、ポイントをインチに、ピクセルをポイントに、ポイントをピクセルに変換できます。ピクセルをポイントに変換する場合、またはその逆の場合、96 dpi (ドット/インチ) 解像度または指定された dpi 解像度で実行できます。 ConvertUtil

System::SharedPtr<Document> doc = System::MakeObject<Document>();
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);
System::SharedPtr<PageSetup> pageSetup = builder->get_PageSetup();
pageSetup->set_TopMargin(ConvertUtil::InchToPoint(1.0));
pageSetup->set_BottomMargin(ConvertUtil::InchToPoint(1.0));
pageSetup->set_LeftMargin(ConvertUtil::InchToPoint(1.5));
pageSetup->set_RightMargin(ConvertUtil::InchToPoint(1.5));
pageSetup->set_HeaderDistance(ConvertUtil::InchToPoint(0.2));
pageSetup->set_FooterDistance(ConvertUtil::InchToPoint(0.2));