Вмъкване На Полета

Има няколко различни начина за вмъкване на полета в документ:

В тази статия ще разгледаме всеки начин по-подробно и ще анализираме как да вмъкнете определени полета, като използвате тези опции.

Вмъкване на полета в документ с DocumentBuilder

В Aspose.Words методът InsertField се използва за вмъкване на нови полета в документ. Първият параметър приема пълния код на полето, което трябва да бъде въведено. Вторият параметър е незадължителен и позволява резултатът от полето да бъде зададен ръчно. Ако това не е предоставено, полето се актуализира автоматично. Можете да подадете нулева или празна стойност към този параметър, за да вмъкнете поле със стойност на празно поле. Ако не сте сигурни за конкретния синтаксис на кода на полето, първо създайте полето в Microsoft Word и превключете, за да видите неговия код на полето.

Следващият пример за код показва как да вмъквате поле за обединяване в документ, като използвате DocumentBuilder:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
builder->InsertField(u"MERGEFIELD MyFieldName \\* MERGEFORMAT");
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertField.docx");

Същата техника се използва за вмъкване на полета, вложени в други полета.

Следващият пример за код показва как да вмъкнете полета, вложени в друго поле, като използвате DocumentBuilder:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
// Insert a few page breaks (just for testing)
for (int i = 0; i < 5; i++)
{
builder->InsertBreak(BreakType::PageBreak);
}
// Move the DocumentBuilder cursor into the primary footer.
builder->MoveToHeaderFooter(HeaderFooterType::FooterPrimary);
// We want to insert a field like this:
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" }
System::SharedPtr<Field> field = builder->InsertField(u"IF ");
builder->MoveTo(field->get_Separator());
builder->InsertField(u"PAGE");
builder->Write(u" <> ");
builder->InsertField(u"NUMPAGES");
builder->Write(u" \"See Next Page\" \"Last Page\" ");
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertNestedFields.docx");

Задаване на локала на ниво поле

Езиков идентификатор е стандартно международно числово съкращение за езика в дадена страна или географски регион. С Aspose.Words можете да зададете езиковата променлива на ниво поле, като използвате свойството LocaleId, което получава или задава езиковата стойност на полето ID.

Следващият пример за код показва как да използвате тази опция:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto builder = MakeObject<DocumentBuilder>();
SharedPtr<Field> field = builder->InsertField(FieldType::FieldDate, true);
field->set_LocaleId(1049);
builder->get_Document()->Save(ArtifactsDir + u"WorkingWithFields.SpecifylocaleAtFieldlevel.docx");

Вмъкване На Непечатано / Празно Поле

Ако искате да вмъкнете непечатани / празни полета ({}) точно като Microsoft Word позволява, можете да използвате метода InsertField с параметъра FieldType.FieldNone. За да вмъкнете поле в документ Word, можете да натиснете клавишната комбинация " Цтрл + F9".

Следващият пример за код показва как да вмъкнете празно поле в документа:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
auto field = System::DynamicCast<FieldUnknown>(builder->InsertField(FieldType::FieldNone, false));
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertFieldNone.docx");

Вмъкване на полета в документ с FieldBuilder

Алтернативният начин за вмъкване на полета в Aspose.Words е клас FieldBuilder. Той осигурява плавен интерфейс за задаване на превключватели на полета и стойности на аргументите като текст, възли или дори вложени полета.

Следващият пример за код показва как да вмъкнете поле в документ, като използвате FieldBuilder:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto firstName = MakeObject<FieldBuilder>(FieldType::FieldMergeField);
firstName->AddArgument("firstname");
auto lastName = MakeObject<FieldBuilder>(FieldType::FieldMergeField);
lastName->AddArgument("lastname");
auto firstnameArgumentBuilder = MakeObject<FieldArgumentBuilder>();
firstnameArgumentBuilder->AddText(u"Firstname: ");
firstnameArgumentBuilder->AddField(firstName);
auto lastnameArgumentBuilder = MakeObject<FieldArgumentBuilder>();
lastnameArgumentBuilder->AddText(u"Lastname: ");
lastnameArgumentBuilder->AddField(lastName);
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"}
auto fieldBuilder = MakeObject<FieldBuilder>(FieldType::FieldIf);
fieldBuilder->AddArgument(u"left expression");
fieldBuilder->AddArgument(u"=");
fieldBuilder->AddArgument(u"right expression");
fieldBuilder->AddArgument(firstnameArgumentBuilder);
fieldBuilder->AddArgument(lastnameArgumentBuilder);
auto field = fieldBuilder->BuildAndInsert(doc->get_FirstSection()->get_Body()->AppendParagraph(String::Empty));
field->Update();
doc->Save(ArtifactsDir + u"Field.InsertFieldUsingFieldBuilder.docx");

Вмъкване на полета с DOM

Можете също да вмъквате различни типове полета, като използвате Aspose.Words Документ Обектен Модел (DOM). В този раздел ще разгледаме няколко примера.

Вмъкване на поле за обединяване в документ с DOM

Полето MERGEFIELD в документа Word може да бъде представено от класа FieldMergeField. Можете да използвате клас FieldMergeField, За да изпълните следните операции::

  • задайте името на полето за обединяване
  • задаване на форматирането на полето за обединяване
  • задайте текста, който е между разделителя на полета и края на полето за обединяване
  • задайте текста, който да бъде вмъкнат след полето за обединяване, ако полето не е празно
  • задайте текста, който да бъде вмъкнат преди полето за обединяване, ако полето не е празно

Следващият пример за код показва как да добавите полето MERGE, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
builder->MoveTo(para);
// We want to insert a merge field like this:
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
auto field = System::DynamicCast<FieldMergeField>(builder->InsertField(FieldType::FieldMergeField, false));
// { " MERGEFIELD Test1" }
field->set_FieldName(u"Test1");
// { " MERGEFIELD Test1 \\b Test2" }
field->set_TextBefore(u"Test2");
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 }
field->set_TextAfter(u"Test3");
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" }
field->set_IsMapped(true);
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
field->set_IsVerticalFormatting(true);
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMergeFieldUsingDOM.docx");

Вмъкване на поле Mail Merge адресен блок в документ с DOM

Полето ADDRESSBLOCK се използва за вмъкване на адресен блок Mail Merge в документ Word. ADDRESSBLOCK полето в документа Word може да бъде представено от класа FieldAddressBlock. Можете да използвате клас FieldAddressBlock, За да изпълните следните операции::

  • задайте дали да включите името на страната/региона в полето
  • посочете дали да форматирате адреса според държавата/региона на получателя, както е определен от POST*CODE (всемирен Пощенски Съюз 2006 г.)
  • посочете името на изключената страна/регион
  • посочете формата на името и адреса
  • посочете езика ID, използван за форматиране на адреса

Следващият пример за код показва как да добавите полето Mail Merge ADDRESSBLOCK, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto builder = MakeObject<DocumentBuilder>(doc);
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
builder->MoveTo(para);
// We want to insert a mail merge address block like this:
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
auto field = System::DynamicCast<FieldAddressBlock>(builder->InsertField(FieldType::FieldAddressBlock, false));
// { ADDRESSBLOCK \\c 1" }
field->set_IncludeCountryOrRegionName(u"1");
// { ADDRESSBLOCK \\c 1 \\d" }
field->set_FormatAddressOnCountryOrRegion(true);
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 }
field->set_ExcludedCountryOrRegionName(u"Test2");
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 }
field->set_NameAndAddressFormat(u"Test3");
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
field->set_LanguageId(u"Test 4");
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx");

Вмъкване на предварително поле в документ без използване на DocumentBuilder

Полето ADVANCE се използва за изместване на следващ текст в рамките на ред отляво, отдясно, нагоре или надолу. Полето ADVANCE в документа Word може да бъде представено от класа FieldAdvance. Можете да използвате клас FieldAdvance, За да изпълните следните операции:

  • посочете броя на точките, с които текстът, който следва полето, трябва да бъде преместен вертикално от горния край на страницата
  • задайте броя на точките, с които текстът, който следва полето, трябва да бъде преместен хоризонтално от левия край на колоната, рамката или текстовото поле
  • посочете броя на точките, с които текстът, който следва полето, трябва да бъде преместен наляво, надясно, нагоре или надолу

Следващият пример за код показва как да добавите полето ADVANCE, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
// We want to insert an Advance field like this:
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
auto field = System::DynamicCast<FieldAdvance>(para->AppendField(FieldType::FieldAdvance, false));
// { ADVANCE \\d 10 " }
field->set_DownOffset(u"10");
// { ADVANCE \\d 10 \\l 10 }
field->set_LeftOffset(u"10");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 }
field->set_RightOffset(u"-3.3");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 }
field->set_UpOffset(u"0");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 }
field->set_HorizontalPosition(u"100");
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
field->set_VerticalPosition(u"100");
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx");

Вмъкване на поле ASK в документ без използване на DocumentBuilder

Полето ASK се използва, за да подканва потребителя за текст, който да присвои на отметка в документ Word. ASK полето в документа Word може да бъде представено от класа FieldAsk. Можете да използвате клас FieldAsk, За да изпълните следните операции::

  • посочете името на отметката
  • задаване на потребителски отговор по подразбиране (начална стойност, съдържаща се в прозореца на подкана)
  • посочете дали отговорът на потребителя трябва да бъде получен веднъж за операция Mail Merge
  • посочете текста на подканата (заглавието на прозореца на подканата)

Следващият пример за код показва как да добавите полето ASK, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
// We want to insert an Ask field like this:
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
auto field = System::DynamicCast<FieldAsk>(para->AppendField(FieldType::FieldAsk, false));
// { ASK \"Test 1\" " }
field->set_BookmarkName(u"Test 1");
// { ASK \"Test 1\" Test2 }
field->set_PromptText(u"Test2");
// { ASK \"Test 1\" Test2 \\d Test3 }
field->set_DefaultResponse(u"Test3");
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
field->set_PromptOnceOnMailMerge(true);
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx");

Вмъкване на поле AUTHOR в документ без използване на DocumentBuilder

Полето AUTHOR се използва за обозначаване на името на автора на документа от свойствата Document. Полето AUTHOR в документа Word може да бъде представено от класа FieldAuthor. Можете да използвате клас FieldAuthor, За да изпълните следните операции::

  • посочете името на автора на документа

Следващият пример за код показва как да добавите полето AUTHOR, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto para = System::DynamicCast<Paragraph>(doc->GetChildNodes(NodeType::Paragraph, true)->idx_get(0));
// We want to insert an AUTHOR field like this:
// { AUTHOR Test1 }
auto field = System::DynamicCast<FieldAuthor>(para->AppendField(FieldType::FieldAuthor, false));
// { AUTHOR Test1 }
field->set_AuthorName(u"Test1");
field->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertAuthorField.docx");

Вмъкване на поле INCLUDETEXT в документ без използване на DocumentBuilder

Полето INCLUDETEXT вмъква текста и графиките, съдържащи се в документа, посочен в кода на полето. Можете да вмъкнете целия документ или част от документа, посочен с отметка. Това поле в документа Word е представено от INCLUDETEXT. Можете да използвате клас FieldIncludeText, за да изпълните следните операции::

  • посочете името на отметката на включения документ
  • посочете местоположението на документа

Следващият пример за код показва как да добавите полето INCLUDETEXT, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto para = MakeObject<Paragraph>(doc);
// We want to insert an INCLUDETEXT field like this:
// { INCLUDETEXT "file path" }
auto fieldIncludeText = System::DynamicCast<FieldIncludeText>(para->AppendField(FieldType::FieldIncludeText, false));
fieldIncludeText->set_BookmarkName(u"bookmark");
fieldIncludeText->set_SourceFullName(MyDir + u"IncludeText.docx");
doc->get_FirstSection()->get_Body()->AppendChild(para);
fieldIncludeText->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx");

Вмъкване на поле TOA в документ без използване на DocumentBuilder

Полето TOA (Table of Authorities) изгражда и вмъква таблица на властите. В полето TOA се събират записи, отбелязани с TA (Table of Authorities Entry) полета. Microsoft офис Word вмъква полето TOA, когато щракнете върху Insert Table of Authorities в групата Table of Authorities в раздела References. Когато видите полето TOA във вашия документ, синтаксисът изглежда така:

{ TOA [Switches ] }

Следващият пример за код показва как да добавите полето TOA, като използвате DOM към абзац в документ:

//For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>();
auto para = MakeObject<Paragraph>(doc);
// We want to insert TA and TOA fields like this:
// { TA \c 1 \l "Value 0" }
// { TOA \c 1 }
auto fieldTA = System::DynamicCast<FieldTA>(para->AppendField(FieldType::FieldTOAEntry, false));
fieldTA->set_EntryCategory(u"1");
fieldTA->set_LongCitation(u"Value 0");
doc->get_FirstSection()->get_Body()->AppendChild(para);
para = MakeObject<Paragraph>(doc);
auto fieldToa = System::DynamicCast<FieldToa>(para->AppendField(FieldType::FieldTOA, false));
fieldToa->set_EntryCategory(u"1");
doc->get_FirstSection()->get_Body()->AppendChild(para);
fieldToa->Update();
doc->Save(ArtifactsDir + u"WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx");
/