Creazione di campi con FieldBuilder
Costruire campi con FieldBuilder
Questa guida mostra come costruire un campo Word da zero in Aspose.Words FOSS per .NET usando FieldBuilder and FieldArgumentBuilder, invece di lavorare con un campo che esiste già in un documento. Per leggere, aggiornare o rimuovere campi esistenti, consulta il Lavorare con i campi guida.
Creare un campo con FieldBuilder
FieldBuilder crea un campo a partire dai token del codice campo — argomenti e switch. Costruiscine uno con new FieldBuilder(fieldType), passando il FieldType del campo che desideri creare. Aggiungi argomenti con il metodo sovraccaricato AddArgument(argument), che accetta un string, int, double, un FieldBuilder nidificato o un FieldArgumentBuilder. Aggiungi switch con i metodi sovraccaricati AddSwitch(switchName), AddSwitch(switchName, switchArgument) (string), o AddSwitch(switchName, switchArgument) (int/double).
Inserire il campo costruito
Una volta che un FieldBuilder ha i suoi argomenti e switch, chiama BuildAndInsert(refNode) per inserirlo nel documento — una sovraccarico accetta un nodo Inline e inserisce il campo prima di esso, e un’altra accetta un Paragraph e inserisce il campo alla fine di quel paragrafo.
Comporre argomenti complessi con FieldArgumentBuilder
FieldArgumentBuilder crea un argomento di campo complesso composto da campi, nodi e testo semplice, per i casi in cui un singolo argomento richiede più di una semplice stringa. Costruiscine uno con new FieldArgumentBuilder(), quindi chiama AddText(text) per aggiungere testo semplice, AddNode(node) per aggiungere un nodo Inline, o AddField(fieldBuilder) per annidare un altro campo (costruito con il proprio FieldBuilder) all’interno dell’argomento. Passa il FieldArgumentBuilder completato a FieldBuilder.AddArgument(argument) per usarlo come uno degli argomenti del campo esterno.
Suggerimenti e migliori pratiche
- Usa
FieldBuilderquando costruisci un tipo di campo che non è supportato da una delle classi di campo dedicate (comeFieldDateoFieldSymbol), o quando generi codici di campo in modo programmatico a partire dai dati anziché crearli manualmente. - Annida un campo figlio all’interno dell’argomento di un campo esterno con
FieldBuilder.AddArgument(FieldBuilder)per un caso semplice, oppure costruisci un argomento misto di testo, nodi e campi annidati conFieldArgumentBuilderquando l’argomento è più di un singolo campo. - Scegli il sovraccarico
BuildAndInsert(refNode)che corrisponde al punto in cui desideri inserire il campo — prima di un nodoInlinespecifico, oppure alla fine di unParagraph. - Dopo
BuildAndInsert, tratta il risultato come qualsiasi altro campo nell’albero — ad esempio, chiamaUpdate()su di esso se il tipo di campo richiede una ricalcolazione esplicita.
Problemi comuni
| Problema | Cause | Correzione |
|---|---|---|
BuildAndInsert punta alla posizione sbagliata | È stato usato l’overload sbagliato per il punto di inserimento previsto | Passa un nodo Inline per inserirlo prima, o un Paragraph per inserirlo alla sua fine |
| Un argomento di campo non accetta testo semplice e un nodo insieme | AddArgument è stato chiamato con un singolo string/int/double invece di un argomento composto | Costruisci l’argomento misto con FieldArgumentBuilder (AddText, AddNode, AddField) e passalo a AddArgument |
| Il valore dello switch non è riconosciuto nel codice di campo generato | AddSwitch(switchName) è stato usato quando lo switch in realtà richiede un argomento | Usa l’overload AddSwitch(switchName, switchArgument) con il valore stringa, int o double dello switch |
FAQ
Quando dovrei usare FieldBuilder invece di inserire un codice campo preformato?
Usa FieldBuilder quando hai bisogno di un controllo esplicito sugli argomenti e le opzioni di un campo mentre li costruisci programmaticamente, invece di inserire una stringa di codice campo preformata.
Come aggiungo più di un argomento a un campo?
Chiama AddArgument una volta per argomento — è sovraccaricato per string, int, double, un FieldBuilder annidato e FieldArgumentBuilder.
Posso creare un campo il cui argomento contenga un mix di testo e un altro campo?
Sì — usa FieldArgumentBuilder, chiamando AddText, AddNode e AddField secondo necessità, quindi passalo a FieldBuilder.AddArgument.
Come faccio a inserire effettivamente il campo costruito nel documento?
Chiama BuildAndInsert(refNode), passando un nodo Inline (lo inserisce prima) o un Paragraph (lo inserisce alla sua fine).
API Reference Riepilogo
| Classe/Metodo | Descrizione |
|---|---|
FieldBuilder | Costruisce un campo dai token di codice campo (argomenti e interruttori) |
FieldBuilder(fieldType) | Costruttore che prende il FieldType da costruire |
FieldBuilder.AddArgument(argument) | Aggiunge un argomento (string, int, double, FieldBuilder o FieldArgumentBuilder) |
FieldBuilder.AddSwitch(switchName) / AddSwitch(switchName, switchArgument) | Aggiunge un interruttore di campo, con o senza valore |
FieldBuilder.BuildAndInsert(refNode) | Inserisce il campo costruito prima di un nodo Inline o alla fine di un Paragraph |
FieldArgumentBuilder | Costruisce un argomento di campo complesso da testo, nodi e campi nidificati |
FieldArgumentBuilder.AddText(text) | Aggiunge testo semplice all’argomento |
FieldArgumentBuilder.AddNode(node) | Aggiunge un nodo Inline all’argomento |
FieldArgumentBuilder.AddField(fieldBuilder) | Annida un campo costruito da FieldBuilder nell’argomento |