Cum să lucrați cu câmpurile tranzitorii în .NET
Cum să lucrați cu câmpurile tranzitorii în .NET
Aspose.Words FOSS pentru .NET reprezintă un grup de tipuri de câmpuri Word mai vechi — câmpuri de cod de bare și o mână de câmpuri de compatibilitate pre-Open-XML — prin clase dedicate în Aspose.Words.Fields spațiul de nume, denumit informal transitional câmpuri aici. Acest ghid arată cum să le găsiți, să le citiți și să le configurați. Fiecare clasă de câmp tranzițional derivă din tipul de bază Field tip, alături de generic Field obiect expus de Document.Range.Fields.
Ghid pas cu pas
Pasul 1: Găsiți câmpurile tranzitorii într-un document
Enumerați Document.Range.Fields și comparați fiecare Type al câmpului (o valoare FieldType) cu constantele relevante — FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef sau FieldInfo — apoi convertiți genericul Field în clasa corespunzătoare pentru a accesa proprietățile sale specifice. Verificați întotdeauna Type înainte de conversie: convertirea în clasa greșită a câmpului aruncă o InvalidCastException.
Pasul 2: Configurați un câmp DISPLAYBARCODE sau MERGEBARCODE
FieldDisplayBarcode (câmpul DISPLAYBARCODE) și FieldMergeBarcode (câmpul MERGEBARCODE, care implementează și IMergeFieldSurrogate pentru mail merge) împărtășesc același set de proprietăți de configurare a codului de bare: BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar și FixCheckDigit. Setează-le pe instanța câmpului, apoi apelează Update() astfel încât Result să reflecte noua configurare înainte de a salva documentul.
Pasul 3: Citește datele câmpului BARCODE (Poștal) moștenit
FieldBarcode implementează vechiul câmp BARCODE, care este în mod specific un câmp de cod de bare poștal US (POSTNET) și nu un cod de bare cu scop general — nu partajează proprietățile BarcodeType/BarcodeValue din Pasul 2. În schimb expune PostalAddress (adresa pe care o codifică codul de bare), FacingIdentificationMark, IsUSPostalAddress și IsBookmark. Verifică Field.Type față de FieldType.FieldBarcode în mod specific înainte de a citi aceste proprietăți, deoarece convertirea unui câmp DISPLAYBARCODE sau MERGEBARCODE la FieldBarcode nu ar expune proprietățile pe care le aștepți.
Pasul 4: Renderizează imagini de cod de bare cu un generator personalizat
Această ediție FOSS conține date de câmp cod de bare, dar nu include un motor de redare a codurilor de bare. BarcodeParameters este containerul de trecere care consolidează setările din oricare dintre familiile de câmpuri cod de bare — proprietățile DISPLAYBARCODE/MERGEBARCODE din Pasul 2 și proprietățile poștale din Pasul 3 — într-un singur obiect transmis unui renderer. Implementează IBarcodeGenerator, expunând GetBarcodeImage(parameters) și legacy GetOldBarcodeImage(parameters), pentru a furniza redarea efectivă a imaginii; fără o implementare furnizată, câmpurile cod de bare conțin doar date de configurare.
Pasul 5: Lucrează cu câmpurile de compatibilitate moștenite
Patru alte clase acoperă coduri de câmp mai vechi, încă găsite în fișierele legacy .docx. FieldBidiOutline implementează câmpul BIDIOUTLINE pentru numerotarea de contur de la dreapta la stânga și nu expune nicio proprietate în afara suprafeței comune Field. FieldEQ implementează câmpul de ecuație EQ și în plus expune AsOfficeMath() pentru a-și converti conținutul într-un obiect OfficeMath — acest lucru reușește numai când câmpul codifică efectiv o ecuație. FieldFootnoteRef implementează câmpul FOOTNOTEREF, care face referire încrucișată la o marcă de notă de subsol sau de sfârșit, și de asemenea nu expune proprietăți în afara suprafeței comune Field. FieldInfo implementează câmpul INFO, citind sau scriind o proprietate de informații sumare ale documentului prin proprietățile sale InfoType și NewValue.
Pasul 6: Actualizează sau blochează valoarea unui câmp tranzitoriu
Fiecare clasă de câmp tranzitional moștenește GetFieldCode() (textul de cod subliniat al câmpului), Update() (recalculează rezultatul), Unlink() (înlocuiește câmpul cu ultimul său rezultat calculat ca text static) și Remove() (șterge câmpul). Apelați Update() după ce modificați orice configurație a câmpului pentru ca Result să reflecte schimbarea și folosiți Unlink() când valoarea curentă a unui câmp trebuie să fie înghețată în loc să rămână recalculabilă.
Probleme comune și remedieri
InvalidCastException când se face conversia unui Field într-o clasă de câmp tranzițional. Greșit FieldType a fost presupus. Verifică Field.Type față de potrivire FieldType constantă înainte de casting.
A DISPLAYBARCODE/MERGEBARCODE proprietățile câmpului lipsesc după casting. Câmpul a fost cast la FieldBarcode în loc de FieldDisplayBarcode/FieldMergeBarcode (sau invers) — aceste clase expun seturi diferite de proprietăți chiar dacă toate trei reprezintă date de cod de bare. Confirmă Field.Type înainte de turnare.
Câmpurile de cod de bare conțin date, dar nu se redă nicio imagine. Nu IBarcodeGenerator nu a fost furnizată nicio implementare. Furnizați un generator personalizat care implementează GetBarcodeImage(parameters) — această ediție nu include un motor de redare a codurilor de bare încorporat.
FieldEQ.AsOfficeMath() returnează rezultate neașteptate. Câmpul nu conține o instrucțiune de ecuație validă. Inspectați câmpul GetFieldCode() ieșirea înainte de a încerca conversia.
FieldInfoValoarea nu este actualizată după setare NewValue. Câmpul nu a fost reîmprospătat după modificare. Apelă Update() pe câmp după modificare NewValue.
Întrebări frecvente
Ce înseamnă „transitional” pentru aceste tipuri de câmpuri?
Nu este o terminologie oficială Word — grupează clasele de câmpuri în spațiul de nume Aspose.Words.Fields al acestei ediții, care implementează coduri de câmpuri mai vechi (câmpuri de coduri de bare și câmpuri de compatibilitate pre-Open-XML) prin propriile clase puternic tipizate, în loc să fie gestionate doar prin obiectul generic Field.
Folosește FieldBarcode aceleași proprietăți ca FieldDisplayBarcode?
Nu. FieldBarcode implementează câmpul legacy BARCODE (postal/POSTNET) și expune PostalAddress, FacingIdentificationMark, IsUSPostalAddress și IsBookmark. FieldDisplayBarcode și FieldMergeBarcode împărtășesc un set diferit de proprietăți — BarcodeType, BarcodeValue, SymbolHeight și setările de redare aferente.
Această ediție redă imagini de coduri de bare?
Nu. FieldBarcode, FieldDisplayBarcode și FieldMergeBarcode conțin date de configurare a codurilor de bare și expun interfața IBarcodeGenerator, dar nicio mașină de redare a codurilor de bare nu este inclusă în această ediție — este necesară o implementare personalizată IBarcodeGenerator pentru a produce o imagine.
Pot să convertesc un câmp EQ într-o ecuație OfficeMath?
Da, prin FieldEQ.AsOfficeMath(), cu condiția ca codul câmpului să codifice efectiv o ecuație.
Cum pot găsi toate câmpurile tranzitorii într-un document?
Enumeraţi Document.Range.Fields și comparaţi fiecare Field.Type cu constantele FieldType relevante (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).