Inserisci campi

Esistono diversi modi per inserire campi in un documento:

*utilizzando DocumentBuilder *utilizzando FieldBuilder *utilizzando Aspose.Words Document Object Model (DOM)

In questo articolo esamineremo ciascun modo in modo più dettagliato e analizzeremo come inserire determinati campi utilizzando queste opzioni.

Inserimento di campi in un documento utilizzando DocumentBuilder

In Aspose.Words il metodo InsertField viene utilizzato per inserire nuovi campi in un documento. Il primo parametro accetta il codice completo del campo da inserire. Il secondo parametro è facoltativo e consente di impostare manualmente il risultato del campo. Se non viene fornito il campo viene aggiornato automaticamente. È possibile passare null o vuoto a questo parametro per inserire un campo con un valore di campo vuoto. Se non sei sicuro della particolare sintassi del codice di campo, crea prima il campo in Microsoft Word e passa a visualizzarne il codice di campo.

Il seguente esempio di codice mostra come inserire un campo di unione in un documento utilizzando 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");

La stessa tecnica viene utilizzata per inserire campi nidificati all’interno di altri campi.

Il seguente esempio di codice mostra come inserire campi nidificati all’interno di un altro campo utilizzando 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");

Specificare la lingua a livello di campo

Un identificatore di lingua è un’abbreviazione numerica internazionale standard per la lingua di un paese o di una regione geografica. Con Aspose.Words è possibile specificare le impostazioni locali a livello di campo utilizzando la proprietà LocaleId, che ottiene o imposta l’ID delle impostazioni locali del campo.

L’esempio di codice seguente mostra come utilizzare questa opzione:

// 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");

Inserisci campo non digitato/vuoto

Se vuoi inserire campi non tipizzati/vuoti ({}) proprio come consente Microsoft Word, puoi utilizzare il metodo InsertField con il parametro FieldType.FieldNone. Per inserire un campo in un documento Word, puoi premere la combinazione di tasti “Ctrl + F9”.

L’esempio di codice seguente mostra come inserire un campo vuoto nel documento:

// 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");

Inserimento di campi in un documento utilizzando FieldBuilder

Il modo alternativo per inserire campi in Aspose.Words è la classe FieldBuilder. Fornisce un’interfaccia fluida per specificare le opzioni di campo e i valori degli argomenti come testo, nodi o anche campi nidificati.

Il seguente esempio di codice mostra come inserire un campo in un documento utilizzando 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");

Inserimento di campi utilizzando DOM

Puoi anche inserire vari tipi di campi utilizzando Aspose.Words Document Object Model (DOM). In questa sezione vedremo alcuni esempi.

Inserimento di un campo Unisci in un documento utilizzando DOM

Il campo MERGEFIELD nel documento Word può essere rappresentato dalla classe FieldMergeField. È possibile utilizzare la classe FieldMergeField per eseguire le seguenti operazioni:

  • specificare il nome del campo di unione
  • specificare la formattazione del campo di unione
  • specificare il testo che si trova tra il separatore di campo e la fine del campo di unione
  • specificare il testo da inserire dopo il campo unione se il campo non è vuoto
  • specificare il testo da inserire prima del campo unione se il campo non è vuoto

L’esempio di codice seguente mostra come aggiungere il campo MERGE utilizzando DOM a un paragrafo in un documento:

// 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");

Inserimento del campo ADDRESSBLOCK Mail Merge in un documento utilizzando DOM

Il campo ADDRESSBLOCK viene utilizzato per inserire un blocco di indirizzi Mail Merge nel documento Word. Il campo ADDRESSBLOCK nel documento Word può essere rappresentato dalla classe FieldAddressBlock. È possibile utilizzare la classe FieldAddressBlock per eseguire le seguenti operazioni:

  • specificare se includere nel campo il nome del paese/regione
  • specificare se formattare l’indirizzo in base al paese/regione del destinatario come definito da POST*CODE (Universal Postal Union 2006)
  • specificare il nome del paese/regione escluso
  • specificare il formato del nome e dell’indirizzo
  • specificare l’ID della lingua utilizzata per formattare l’indirizzo

Il seguente esempio di codice mostra come aggiungere il campo ADDRESSBLOCK Mail Merge utilizzando DOM a un paragrafo in un documento:

// 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");

Inserimento di un campo ADVANCE in un documento senza utilizzare DocumentBuilder

Il campo ADVANCE viene utilizzato per spostare il testo successivo all’interno di una riga a sinistra, a destra, in alto o in basso. Il campo ADVANCE nel documento Word può essere rappresentato dalla classe FieldAdvance. È possibile utilizzare la classe FieldAdvance per eseguire le seguenti operazioni:

  • specificare il numero di punti di cui deve essere spostato verticalmente il testo che segue il campo dal bordo superiore della pagina
  • specificare il numero di punti di cui il testo che segue il campo deve essere spostato orizzontalmente dal bordo sinistro della colonna, cornice o casella di testo
  • specificare il numero di punti di cui il testo che segue il campo deve essere spostato a sinistra, a destra, in alto o in basso

Il seguente esempio di codice mostra come aggiungere il campo ADVANCE utilizzando DOM a un paragrafo in un documento:

// 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");

Inserimento di un campo ASK in un documento senza utilizzare DocumentBuilder

Il campo ASK viene utilizzato per richiedere all’utente il testo da assegnare a un segnalibro nel documento Word. Il campo ASK nel documento Word può essere rappresentato dalla classe FieldAsk. È possibile utilizzare la classe FieldAsk per eseguire le seguenti operazioni:

  • specificare il nome del segnalibro
  • specificare la risposta utente predefinita (valore iniziale contenuto nella finestra del prompt)
  • specificare se la risposta dell’utente deve essere ricevuta una volta per un’operazione mail merge
  • specificare il testo del prompt (il titolo della finestra del prompt)

Il seguente esempio di codice mostra come aggiungere il campo ASK utilizzando DOM a un paragrafo in un documento:

// 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");

Inserimento di un campo AUTHOR in un documento senza utilizzare DocumentBuilder

Il campo AUTHOR viene utilizzato per specificare il nome dell’autore del documento dalle proprietà Document. Il campo AUTHOR nel documento Word può essere rappresentato dalla classe FieldAuthor. È possibile utilizzare la classe FieldAuthor per eseguire le seguenti operazioni:

  • specificare il nome dell’autore del documento

Il seguente esempio di codice mostra come aggiungere il campo AUTHOR utilizzando DOM a un paragrafo in un documento:

// 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");

Inserimento di un campo INCLUDETEXT in un documento senza utilizzare DocumentBuilder

Il campo INCLUDETEXT inserisce il testo e la grafica contenuti nel documento denominato nel codice del campo. È possibile inserire l’intero documento o una parte del documento a cui fa riferimento un segnalibro. Questo campo nel documento di Word è rappresentato da INCLUDETEXT. È possibile utilizzare la classe FieldIncludeText per eseguire le seguenti operazioni:

  • specificare il nome del segnalibro del documento incluso
  • specificare l’ubicazione del documento

L’esempio di codice seguente mostra come aggiungere il campo INCLUDETEXT utilizzando DOM a un paragrafo in un documento:

// 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");

Inserimento di un campo TOA in un documento senza utilizzare DocumentBuilder

Il campo TOA (Tabella delle autorità) crea e inserisce una tabella delle autorità. Il campo TOA raccoglie le voci contrassegnate dai campi TA (Table of Authorities Entry). Microsoft Office Word inserisce il campo TOA quando si fa clic su Inserisci tabella delle autorità nel gruppo Tabella delle autorità nella scheda References. Quando visualizzi il campo TOA nel tuo documento, la sintassi è simile alla seguente:

{ TOA [Switches ] }

L’esempio di codice seguente mostra come aggiungere il campo TOA utilizzando DOM a un paragrafo in un documento:

// 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");