Campi di transizione

Campi transizionali

Questa guida mostra come lavorare con i tipi di campo transizionali — campi barcode legacy e campi di compatibilità — in Aspose.Words FOSS per .NET.

Aspose.Words FOSS per .NET rappresenta alcuni tipi di campo Word più vecchi tramite un insieme dedicato di classi nel Aspose.Words.Fields namespace, informalmente chiamato transitional fields. Questi sono campi che precedono le successive equivalenti di campo Open XML ma rimangono validi all’interno .docx documenti aperti da fonti legacy. Ogni tipo di campo transizionale ha la propria classe fortemente tipizzata che deriva da Field, accanto al generico Field oggetto esposto da Document.Range.Fields.


Campi barcode

Tre classi di campo generano o visualizzano dati barcode all’interno di un documento: FieldBarcode (il campo BARCODE — un barcode postale legacy con le proprie proprietà PostalAddress, IsBookmark, FacingIdentificationMark e IsUSPostalAddress), FieldDisplayBarcode (il campo DISPLAYBARCODE), e FieldMergeBarcode (il campo MERGEBARCODE, che implementa anche IMergeFieldSurrogate per l’uso durante la fusione della posta). FieldDisplayBarcode e FieldMergeBarcode condividono le stesse proprietà di configurazione barcode di uso generale — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar e FixCheckDigit — proprietà che FieldBarcode non possiede.

La classe BarcodeParameters è un contenitore pass-through che espone l’unione di entrambi i set di proprietà (le proprietà dell’indirizzo postale e le proprietà di configurazione barcode generali), utilizzato per passare le impostazioni a un renderer barcode, e IBarcodeGenerator è l’interfaccia che un renderer personalizzato implementa, esponendo GetBarcodeImage(parameters) e il legacy GetOldBarcodeImage(parameters). Itera Document.Range.Fields e controlla Field.Type rispetto a FieldType.FieldBarcode, FieldType.FieldDisplayBarcode o FieldType.FieldMergeBarcode per individuare questi campi, quindi effettua il cast alla classe di campo specifica — BarcodeValue e BarcodeType sono disponibili solo dopo il cast a FieldDisplayBarcode o FieldMergeBarcode, non a FieldBarcode.


Campi di compatibilità legacy

Quattro classi di campo aggiuntive coprono codici di campo Word più vecchi che sono meno comuni nei documenti appena creati ma compaiono ancora nei file legacy .docx: FieldBidiOutline (il campo BIDIOUTLINE, per la numerazione di schema da destra a sinistra), FieldEQ (il campo equazione EQ, che espone anche AsOfficeMath() per convertire il suo contenuto in un oggetto OfficeMath), FieldFootnoteRef (il campo FOOTNOTEREF, che fa riferimento incrociato a un segno di nota a piè di pagina o di fine documento), e FieldInfo (il campo INFO, che legge o scrive una proprietà di informazioni di riepilogo del documento tramite le sue proprietà InfoType e NewValue).

Ognuna di queste classi di campo eredita la stessa interfaccia Field: GetFieldCode() restituisce il testo del codice sottostante del campo, Update() ricalcola il risultato del campo, Unlink() sostituisce il campo con il suo ultimo risultato calcolato, e Remove() elimina il campo dal documento. IFieldCodeTokenInfoProvider è implementato da FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode e FieldInfo, poiché i loro codici di campo includono switch strutturati oltre a una semplice stringa di istruzione.


Suggerimenti e migliori pratiche

  • Controlla sempre Field.Type prima di convertire un Field generico in una delle classi di campo transizionali — un cast errato genera un InvalidCastException.
  • Invoca Update() dopo aver modificato le proprietà di un campo codice a barre in modo che Result rifletta la nuova configurazione prima che il documento venga salvato.
  • FieldEQ.AsOfficeMath() riesce solo quando il campo EQ codifica effettivamente un’equazione; verifica che il Result del campo sembri una formula prima di invocarlo.
  • Usa Unlink() quando vuoi congelare il valore corrente di un campo come testo statico, rinunciando alla possibilità di ricalcolarlo in seguito.
  • Le classi di campo codice a barre contengono solo dati — questa edizione FOSS non include il motore di rendering dei codici a barre, quindi l’output di GetBarcodeImage() dipende dall’implementazione IBarcodeGenerator che fornisci.

Problemi comuni

ProblemaCausaCorreggi
InvalidCastException quando si effettua il casting di un FieldAssunto FieldType erratoControlla Field.Type contro la costante corrispondente FieldType prima
FieldEQ.AsOfficeMath() restituisce risultati inaspettatiIl campo non contiene un’istruzione di equazione validaEsamina l’output di GetFieldCode() prima della conversione
Il campo Barcode non ha un’immagine renderizzataNessuna implementazione di IBarcodeGenerator fornitaFornisci un generatore personalizzato che implementa GetBarcodeImage()
Il valore di FieldInfo non è stato aggiornato dopo la modifica di NewValueCampo non aggiornatoChiama Update() sul campo dopo aver modificato NewValue

FAQ

Cosa significa “transitional” per questi tipi di campo?

Non è una terminologia ufficiale di Word — raggruppa le classi di campo nel namespace Aspose.Words.Fields di questa edizione che implementano codici di campo più vecchi (barcode e campi di compatibilità pre-Open-XML) tramite le proprie classi tipizzate anziché essere gestiti solo tramite l’oggetto generico Field.

Questa edizione genera immagini barcode?

No. FieldBarcode, FieldDisplayBarcode e FieldMergeBarcode contengono dati barcode e espongono l’interfaccia IBarcodeGenerator, ma nessun motore di rendering barcode integrato è fornito in questa edizione — devi fornire la tua implementazione IBarcodeGenerator.

Posso convertire un campo EQ in un’equazione OfficeMath?

Sì, tramite FieldEQ.AsOfficeMath(), a condizione che il codice del campo codifichi effettivamente un’equazione.

Come posso trovare tutti i campi transizionali in un documento?

Elenca Document.Range.Fields e confronta ciascun Field.Type con le relative costanti FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).


API Reference Riepilogo

Classe / MetodoDescrizione
FieldBarcodeImplementa il campo BARCODE
FieldDisplayBarcodeImplementa il campo DISPLAYBARCODE
FieldMergeBarcodeImplementa il campo codice a barre per unione di posta MERGEBARCODE
BarcodeParametersContenitore per le impostazioni del codice a barre passate a un generatore
IBarcodeGeneratorInterfaccia per un renderer di immagini barcode personalizzato
FieldBidiOutlineImplementa il campo BIDIOUTLINE
FieldEQImplementa il campo equazione EQ; AsOfficeMath() converte in OfficeMath
FieldFootnoteRefImplementa il campo FOOTNOTEREF
FieldInfoImplementa il campo proprietà del documento INFO

Vedi anche

 Italiano