Înserare câmpuri

Există mai multe modalități diferite de a introduce câmpuri într-un document:

În acest articol vom vedea fiecare metodă în detaliu și vom analiza cum se introduc anumite câmpuri folosind aceste opțiuni.

Introducerea câmpurilor într-un document folosind DocumentBuilder

În Aspose.Words, metoda InsertField este folosită pentru inserarea unor câmpuri noi într-un document. “Prima paramentare acceptă codul complet de câmp al câmpului care urmează să fie introdus.” “Al doilea parametru este opțional și permite ca rezultatul câmpului să fie setat manual.” Dacă acest lucru nu este furnizat atunci câmpul este actualizat automat. Poţi trece null sau gol la acest parametru pentru a insera un câmp cu o valoare de câmp goală. Dacă nu eşti sigur de sintaxa codului câmpului specific, creează câmpul în Microsoft Word mai întâi şi comută pentru a vedea codul câmpului său.

Exemplul de cod următor arată cum să insereze un câmp de fuziune într-un document folosind DocumentBuilder:

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

Aceeași tehnică se folosește pentru a introduce câmpuri încorporate în alte câmpuri.

Exemplul următor de cod arată cum să insereze câmpuri încorporate într-un alt câmp folosind DocumentBuilder":

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
for (int i = 0; i < 5; i++)
builder.InsertBreak(BreakType.PageBreak);
builder.MoveToHeaderFooter(HeaderFooterType.FooterPrimary);
// We want to insert a field like this:
// { IF {PAGE} <> {NUMPAGES} "See Next Page" "Last Page" }
Field field = builder.InsertField(@"IF ");
builder.MoveTo(field.Separator);
builder.InsertField("PAGE");
builder.Write(" <> ");
builder.InsertField("NUMPAGES");
builder.Write(" \"See Next Page\" \"Last Page\" ");
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertNestedFields.docx");

Specificați “Locale” la nivelul câmpului

Un identificator de limbă este o abreviere numerică internațională standard pentru limba dintr-o țară sau regiune geografică. Cu Aspose.Words, puteți specificaLocale la nivel de câmp folosind proprietatea LocaleId, care obține sau stabilește ID-ul local al câmpului.

Exemplul de cod următor arată cum să folosești această opțiune:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
DocumentBuilder builder = new DocumentBuilder();
Field field = builder.InsertField(FieldType.FieldDate, true);
field.LocaleId = 1049;
builder.Document.Save(ArtifactsDir + "WorkingWithFields.SpecifylocaleAtFieldlevel.docx");

Introduceți câmp neclasificat/gol

Dacă doriți să inserați câmpuri ne-tipate/goale ( {} ) doar ca Microsoft Word permite, puteți folosi metoda InsertField cu parametrul FieldType.FieldNone. Pentru a introduce un câmp într-un document Word puteți apăsa combinația de taste “Ctrl + F9”.

Exemplul de cod următor arată cum să inserezi un câmp gol în document:

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

Inserarea câmpurilor într-un document folosind FieldBuilder

“Modul alternativ de a insera câmpuri în Aspose.Words este clasa FieldBuilder.” Acesta oferă o interfață fluidă pentru a specifica comutatoare de câmpuri și valori de argumente ca text, noduri sau chiar câmpuri încastrate.

Exemplul de cod următor arată cum să introduceți un câmp într-un document utilizând FieldBuilder:"

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
// Prepare IF field with two nested MERGEFIELD fields: { IF "left expression" = "right expression" "Firstname: { MERGEFIELD firstname }" "Lastname: { MERGEFIELD lastname }"}
FieldBuilder fieldBuilder = new FieldBuilder(FieldType.FieldIf)
.AddArgument("left expression")
.AddArgument("=")
.AddArgument("right expression")
.AddArgument(
new FieldArgumentBuilder()
.AddText("Firstname: ")
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("firstname")))
.AddArgument(
new FieldArgumentBuilder()
.AddText("Lastname: ")
.AddField(new FieldBuilder(FieldType.FieldMergeField).AddArgument("lastname")));
// Insert IF field in exact location
Field field = fieldBuilder.BuildAndInsert(doc.FirstSection.Body.FirstParagraph);
field.Update();
doc.Save(ArtifactsDir + "Field.InsertFieldUsingFieldBuilder.docx");

Inserarea câmpurilor folosind DOM

“Puteți introduce și diferite tipuri de câmpuri folosind Aspose.Words Document Object Model (DOM)”. În această secţiune, vom privi câteva exemple.

Inserarea unui câmp de fuziune într-un document folosind DOM

“Câmpul MERGEFIELD din documentul Word poate fi reprezentat de clasa FieldMergeField.” Puteți utiliza clasa FieldMergeField pentru a efectua următoarele operații:

  • specifica numele câmpului de fuziune
  • specificaţi formatarea câmpului de fuziune
  • specificați textul care este între separatorul câmpului și sfârșitul câmpului de fuziune
  • specifica textul care urmează să fie inserat după câmpul de fuziune dacă câmpul nu este gol
  • specificaţi textul ce urmează să fie inserat înaintea câmpului de fuziune dacă acesta nu este gol

Exemplul următor arată cum să adăugați câmpul MERGE utilizând DOM la un paragraf într-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
builder.MoveTo(para);
// We want to insert a merge field like this:
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
FieldMergeField field = (FieldMergeField) builder.InsertField(FieldType.FieldMergeField, false);
// { " MERGEFIELD Test1" }
field.FieldName = "Test1";
// { " MERGEFIELD Test1 \\b Test2" }
field.TextBefore = "Test2";
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 }
field.TextAfter = "Test3";
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m" }
field.IsMapped = true;
// { " MERGEFIELD Test1 \\b Test2 \\f Test3 \\m \\v" }
field.IsVerticalFormatting = true;
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMergeFieldUsingDOM.docx");

Inserarea Mail Merge ADDRESSBLOCK câmp într-un document folosind DOM

Câmpul ADDRESSBLOCK este utilizat pentru inserarea unui bloc de adresă Mail Merge în documentul Word. Câmpul ADDRESSBLOCK din documentul Word poate fi reprezentat de clasa FieldAddressBlock. Poţi folosi clasa FieldAddressBlock pentru a efectua următoarele operaţii:

  • specificaţi dacă să includeţi numele ţării/regiunii în câmp “- specificați dacă să formatați adresa în conformitate cu țara/regiunea destinatarului așa cum este definită de POST*CODE (Uniunea Poștală Universală din 2006).”
  • specifica numele ţării/regiunii excluse “- specifică numele și formatul adresei”
  • specificați ID-ul limbii utilizate pentru a formata adresa de e-mail

Exemplul de cod următor arată cum să adăugați câmpul Mail Merge ADDRESSBLOCK utilizând DOM la un paragraf într-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[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\" }
FieldAddressBlock field = (FieldAddressBlock) builder.InsertField(FieldType.FieldAddressBlock, false);
// { ADDRESSBLOCK \\c 1" }
field.IncludeCountryOrRegionName = "1";
// { ADDRESSBLOCK \\c 1 \\d" }
field.FormatAddressOnCountryOrRegion = true;
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 }
field.ExcludedCountryOrRegionName = "Test2";
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 }
field.NameAndAddressFormat = "Test3";
// { ADDRESSBLOCK \\c 1 \\d \\e Test2 \\f Test3 \\l \"Test 4\" }
field.LanguageId = "Test 4";
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertMailMergeAddressBlockFieldUsingDOM.docx");

Inserarea ADVANCE câmp într-un document fără să folosești DocumentBuilder

Câmpul ADVANCE este utilizat pentru a deplasa textul următor într-o linie la stânga, dreapta, sus sau jos. Campul ADVANCE din documentul Word poate fi reprezentat de clasa FieldAdvance. Puteți utiliza clasa FieldAdvance pentru a efectua următoarele operații:

  • specificaţi numărul de puncte prin care textul care urmează câmpului ar trebui deplasat vertical de la marginea superioară a paginii
  • specificaţi numărul de puncte prin care textul care urmează câmpului ar trebui să fie deplasat orizontal din stânga marginii coloanei, cadrului sau casetei de text
  • specificați numărul de puncte prin care textul ce urmează câmpului ar trebui să fie deplasat spre stânga, dreapta, sus sau jos

Exemplul de cod următor arată cum să adăugați câmpul ADVANCE folosind DOM la un paragraf dintr-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an Advance field like this:
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
FieldAdvance field = (FieldAdvance) para.AppendField(FieldType.FieldAdvance, false);
// { ADVANCE \\d 10 " }
field.DownOffset = "10";
// { ADVANCE \\d 10 \\l 10 }
field.LeftOffset = "10";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 }
field.RightOffset = "-3.3";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 }
field.UpOffset = "0";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 }
field.HorizontalPosition = "100";
// { ADVANCE \\d 10 \\l 10 \\r -3.3 \\u 0 \\x 100 \\y 100 }
field.VerticalPosition = "100";
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertAdvanceFieldWithOutDocumentBuilder.docx");

Introducerea unui câmp ASK într-un document fără utilizarea DocumentBuilder

Câmpul ASK se foloseşte pentru a solicita utilizatorului textul care să fie atribuit unei Semnări în documentul Word. Câmpul ASK din documentul Word poate fi reprezentat de clasa FieldAsk. Puteți folosi clasa FieldAsk pentru a efectua următoarele operații:

“- specificați numele semnului de carte”

  • specificați răspunsul implicite al utilizatorului (valoarea inițială conținută în fereastra de solicitare)
  • specificaţi dacă răspunsul utilizatorului trebuie să fie primit o dată pe o Mail Merge operaţie
  • specifica textul de introducere (titlul ferestrei de introducere)

Exemplul de cod următor prezintă modul în care să adăugați ASK Câmp utilizând DOM la un paragraf într-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an Ask field like this:
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
FieldAsk field = (FieldAsk) para.AppendField(FieldType.FieldAsk, false);
// { ASK \"Test 1\" " }
field.BookmarkName = "Test 1";
// { ASK \"Test 1\" Test2 }
field.PromptText = "Test2";
// { ASK \"Test 1\" Test2 \\d Test3 }
field.DefaultResponse = "Test3";
// { ASK \"Test 1\" Test2 \\d Test3 \\o }
field.PromptOnceOnMailMerge = true;
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertASKFieldWithOutDocumentBuilder.docx");

Inserarea câmpului AUTHOR într-un document fără a folosi DocumentBuilder

Câmpul AUTHOR se folosește pentru a specifica numele autorului documentului din Document proprietăți. Câmpul AUTHOR din documentul Word poate fi reprezentat de clasa FieldAuthor. Puteți utiliza clasa FieldAuthor pentru a efectua următoarele operații:

  • specificați numele autorului documentului

Exemplul următor de cod arată cum să adăugați câmpul AUTHOR folosind DOM la un paragraf într-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = (Paragraph) doc.GetChildNodes(NodeType.Paragraph, true)[0];
// We want to insert an AUTHOR field like this:
// { AUTHOR Test1 }
FieldAuthor field = (FieldAuthor) para.AppendField(FieldType.FieldAuthor, false);
field.AuthorName = "Test1"; // { AUTHOR Test1 }
field.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertAuthorField.docx");

Introducerea unui câmp INCLUDETEXT într-un document fără a folosi DocumentBuilder

Câmpul INCLUDETEXT inserează textul și grafiile din documentul numit în codul câmpului. Puteți insera întregul document sau o porțiune a acestuia care este referit de un marcaj. Acest câmp în documentul Word este reprezentat de INCLUDETEXT. Puteți utiliza clasa FieldIncludeText pentru a efectua următoarele operații:

  • specificaţi numele semnului de carte pentru documentul inclus
  • specificaţi locaţia documentului

Exemplul de cod următor arată cum să adaugăm câmpul INCLUDETEXT utilizând DOM la un paragraf într-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = new Paragraph(doc);
// We want to insert an INCLUDETEXT field like this:
// { INCLUDETEXT "file path" }
FieldIncludeText fieldIncludeText = (FieldIncludeText) para.AppendField(FieldType.FieldIncludeText, false);
fieldIncludeText.BookmarkName = "bookmark";
fieldIncludeText.SourceFullName = MyDir + "IncludeText.docx";
doc.FirstSection.Body.AppendChild(para);
fieldIncludeText.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertIncludeFieldWithoutDocumentBuilder.docx");

Introducerea TOA câmpului într-un document fără a utiliza DocumentBuilder

The TOA (Tabelul de autorități) câmp construiește și inserează un tabel de autorități. The TOA câmp colectează intrări marcate cu TA (Intrare Tabelul de Autorități) câmpuri. Microsoft Office Word introduce câmpul TOA când faceți clic pe Insert Table of Authorities în grupul Tabelul autorităților pe fila References. Când vizualizați câmpul TOA în documentul dvs., sintaxa arată așa:

{ TOA [Switches ] }

Exemplul de cod următor arată cum să adaugeți câmpul TOA folosind DOM într-un paragraf dintr-un document:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document();
Paragraph para = new Paragraph(doc);
// We want to insert TA and TOA fields like this:
// { TA \c 1 \l "Value 0" }
// { TOA \c 1 }
FieldTA fieldTA = (FieldTA) para.AppendField(FieldType.FieldTOAEntry, false);
fieldTA.EntryCategory = "1";
fieldTA.LongCitation = "Value 0";
doc.FirstSection.Body.AppendChild(para);
para = new Paragraph(doc);
FieldToa fieldToa = (FieldToa) para.AppendField(FieldType.FieldTOA, false);
fieldToa.EntryCategory = "1";
doc.FirstSection.Body.AppendChild(para);
fieldToa.Update();
doc.Save(ArtifactsDir + "WorkingWithFields.InsertTOAFieldWithoutDocumentBuilder.docx");