Câmpuri de tranziție
Câmpuri tranzitorii
Acest ghid arată cum să lucraţi cu tipurile de câmpuri tranzitorii — coduri de bare moștenite și câmpuri de compatibilitate — în Aspose.Words FOSS pentru .NET.
Aspose.Words FOSS for .NET reprezintă anumite tipuri mai vechi de câmpuri Word printr-un set dedicat de clase în Aspose.Words.Fields spațiul de nume, numit informal transitional câmpuri. Acestea sunt câmpuri care preced echivalentele ulterioare de câmpuri Open XML dar rămân valide în interiorul .docx documentelor deschise din surse moștenite. Fiecare tip de câmp tranzitoriu are propria clasă puternic tipizată care derivă din Field, alături de obiectul generic Field expus de Document.Range.Fields.
Câmpuri cod de bare
Trei clase de câmp generează sau afișează date de cod de bare în interiorul unui document: FieldBarcode (câmpul BARCODE — un cod de bare poștal moștenit cu propriile sale proprietăți PostalAddress, IsBookmark, FacingIdentificationMark și IsUSPostalAddress), FieldDisplayBarcode (câmpul DISPLAYBARCODE), și FieldMergeBarcode (câmpul MERGEBARCODE, care implementează, de asemenea, IMergeFieldSurrogate pentru utilizare în timpul combinării de corespondență). FieldDisplayBarcode și FieldMergeBarcode împărtășesc aceleași proprietăți de configurare a codului de bare cu scop general — BarcodeType, BarcodeValue, SymbolHeight, SymbolRotation, ScalingFactor, ForegroundColor, BackgroundColor, PosCodeStyle, CaseCodeStyle, ErrorCorrectionLevel, DisplayText, AddStartStopChar și FixCheckDigit — proprietăți pe care FieldBarcode nu le are.
Clasa BarcodeParameters este un container de trecere care expune uniunea ambelor seturi de proprietăţi (proprietăţile de adresă poștală și proprietăţile de configurare generală a codului de bare), utilizat pentru a transmite setările unui renderer de cod de bare, iar IBarcodeGenerator este interfaţa pe care o implementează un renderer personalizat, expunând GetBarcodeImage(parameters) și GetOldBarcodeImage(parameters) moştenit. Iteraţi Document.Range.Fields şi verificaţi Field.Type faţă de FieldType.FieldBarcode, FieldType.FieldDisplayBarcode sau FieldType.FieldMergeBarcode pentru a localiza aceste câmpuri, apoi faceţi cast la clasa specifică de câmp — BarcodeValue şi BarcodeType sunt disponibile doar după ce aţi făcut cast la FieldDisplayBarcode sau FieldMergeBarcode, nu la FieldBarcode.
Câmpuri de compatibilitate moștenite
Patru clase suplimentare de câmpuri acoperă coduri de câmp Word mai vechi, care sunt mai puțin comune în documentele create recent, dar apar în continuare în fișierele .docx moștenite: FieldBidiOutline (câmpul BIDIOUTLINE, pentru numerotarea scheletului de la dreapta la stânga), FieldEQ (câmpul ecuație EQ, care expune și AsOfficeMath() pentru a converti conținutul său într-un obiect OfficeMath), FieldFootnoteRef (câmpul FOOTNOTEREF, care face referință încrucișată la o notă de subsol sau de sfârșit), și FieldInfo (câmpul INFO, care citește sau scrie o proprietate de informații sumare ale documentului prin proprietățile sale InfoType și NewValue).
Fiecare dintre aceste clase de câmpuri moștenește aceeași suprafață Field: GetFieldCode() returnează textul codului de bază al câmpului, Update() reevaluează rezultatul câmpului, Unlink() înlocuiește câmpul cu ultimul său rezultat calculat și Remove() șterge câmpul din document. IFieldCodeTokenInfoProvider este implementat de FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode și FieldInfo, deoarece codurile lor de câmp conțin comutatoare structurate dincolo de un simplu șir de instrucțiuni.
Sfaturi și bune practici
- Verificați întotdeauna
Field.Typeînainte de a converti unFieldgeneric într-una dintre clasele de câmpuri tranzitorii — o conversie incorectă aruncă unInvalidCastException. - Apelați
Update()după ce modificați proprietățile unui câmp de cod de bare, astfel încâtResultsă reflecte noua configurație înainte ca documentul să fie salvat. FieldEQ.AsOfficeMath()reușește numai când câmpul EQ codifică efectiv o ecuație; verificați căResultal câmpului arată ca o formulă înainte de a-l apela.- Utilizați
Unlink()atunci când doriți să fixați valoarea curentă a unui câmp ca text static, renunțând la posibilitatea de a o recalcula ulterior. - Clasele de câmpuri de cod de bare transportă doar date — această ediție FOSS nu include motorul de randare a codurilor de bare, astfel că rezultatul
GetBarcodeImage()depinde de implementareaIBarcodeGeneratorpe care o furnizați.
Probleme comune
| Issue | Cause | Corectare |
|---|---|---|
InvalidCastException când se face conversia unui Field | S-a presupus greșit FieldType | Verificați mai întâi Field.Type față de constanta FieldType corespunzătoare |
FieldEQ.AsOfficeMath() returnează rezultate neașteptate | Câmpul nu conține o instrucțiune de ecuație validă | Inspectați ieșirea GetFieldCode() înainte de conversie |
| Câmpul de cod de bare nu are imagine redată | Nu a fost furnizată nicio implementare IBarcodeGenerator | Furnizați un generator personalizat care implementează GetBarcodeImage() |
Valoarea FieldInfo nu a fost actualizată după modificarea NewValue | Câmpul nu a fost reîmprospătat | Apelați Update() pe câmp după modificarea NewValue |
FAQ
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 compatibilitate pre-Open-XML) prin propriile clase puternic tipizate, în loc să fie gestionate doar prin obiectul generic Field.
Această ediție redă imagini de coduri de bare?
Nu. FieldBarcode, FieldDisplayBarcode și FieldMergeBarcode conțin date de coduri de bare și expun interfața IBarcodeGenerator, dar nicio mașină de redare a codurilor de bare încorporată nu este livrată în această ediție — trebuie să furnizați propria implementare IBarcodeGenerator.
Pot să convertesc un câmp EQ într-o ecuație OfficeMath?
Da, prin FieldEQ.AsOfficeMath(), cu condiția ca codul câmpului să encode efectiv o ecuație.
Cum pot găsi toate câmpurile tranzitorii dintr-un document?
Enumerați Document.Range.Fields și comparați fiecare Field.Type cu constantele relevante FieldType (FieldBarcode, FieldDisplayBarcode, FieldMergeBarcode, FieldBidiOutline, FieldEQ, FieldFootnoteRef, FieldInfo).
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
FieldBarcode | Implementează câmpul BARCODE |
FieldDisplayBarcode | Implementează câmpul DISPLAYBARCODE |
FieldMergeBarcode | Implementează câmpul de cod de bare pentru îmbinare de corespondență MERGEBARCODE |
BarcodeParameters | Container pentru setările de cod de bare transmise unui generator |
IBarcodeGenerator | Interfață pentru un renderer personalizat de imagini de cod de bare |
FieldBidiOutline | Implementează câmpul BIDIOUTLINE |
FieldEQ | Implementează câmpul de ecuație EQ; AsOfficeMath() se convertește în OfficeMath |
FieldFootnoteRef | Implementează câmpul FOOTNOTEREF |
FieldInfo | Implementează câmpul de proprietate a documentului INFO |