Cum să lucraţi cu Proprietăţile documentului în .NET

Cum să lucraţi cu Proprietăţile documentului în .NET

Cum să lucraţi cu proprietăţile documentului în .NET

Fiecare document Word conţine două categorii de metadate — câmpurile standard pe care Word le urmăreşte pentru fiecare fişier şi orice valori definite de aplicaţie adăugate de un program. Acest ghid arată cum să citiţi şi să setaţi ambele cu Aspose.Words FOSS pentru .NET, utilizând Document.BuiltInDocumentProperties şi Document.CustomDocumentProperties, ambele fiind în cele din urmă construite pe aceeaşi reprezentare DocumentProperty.


Ghid pas cu pas

Pasul 1: Citiţi şi setaţi proprietăţile documentului încorporate

Document.BuiltInDocumentProperties returnează o colecție BuiltInDocumentProperties. Deoarece este un set fix şi cunoscut de proprietăţi, valorile sunt citite şi scrise ca membri obişnuiţi în loc să fie căutate după nume — de exemplu BuiltInDocumentProperties.Author, .Title, .Subject, .Manager, .Company, .Category, .Keywords şi .Comments pentru câmpuri descriptive, sau .CreatedTime, .LastSavedTime, .LastPrinted şi .LastSavedBy pentru marcaje de timp. Statistici precum .Characters, .CharactersWithSpaces, .Lines şi .Bytes sunt de asemenea expuse în acest mod, alături de .Template şi .HyperlinkBase.


Pasul 2: Adăugaţi o proprietate personalizată a documentului

Document.CustomDocumentProperties returnează o colecție CustomDocumentProperties pentru metadatele definite de aplicație care nu fac parte din setul încorporat al Word. Apelați una dintre suprasarcinile Add(name, value) cu un nume și o valoare tipizată — șir, număr, boolean sau dată, în funcție de suprasarcina care corespunde tipului valorii — pentru a crea o proprietate nouă.


Pasul 3: Conectați o proprietate personalizată la conținutul documentului

În loc de o valoare statică, o proprietate personalizată poate urmări un interval de conținut marcat cu semn de carte, astfel încât valoarea sa să rămână sincronizată cu acel conținut. Apelați CustomDocumentProperties.AddLinkToContent(name, linkSource), trecând un nume de semn de carte ca linkSource, în loc să sincronizați manual o proprietate statică de fiecare dată când conținutul legat se modifică.


Pasul 4: Căutați, verificați și eliminați proprietățile

Atât BuiltInDocumentProperties, cât și CustomDocumentProperties derivă din abstractul DocumentPropertyCollection, astfel că sunt inspectate în același mod: indexarea prin nume (de exemplu properties[name]) recuperează o proprietate, Contains(name) verifică dacă există, IndexOf(name) returnează poziția ei și Count raportează câte proprietăți conține colecția. Apelați Contains(name) înainte de a indexa prin nume când o proprietate personalizată ar putea să nu existe, pentru a evita tratarea unei proprietăți lipsă ca o cale de excepție. Eliminați o proprietate cu Remove(name) sau RemoveAt(index), sau goliți toate proprietățile din colecție cu Clear().


Pasul 5: Citiți valoarea unei proprietăți personalizate fără a cunoaște tipul acesteia în prealabil

Un DocumentProperty are un Name, un Value netipizat și un Type — o valoare enum PropertyType: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray sau Other. Deoarece Value este netipizat, utilizați accesoriul tipizat corespunzător în loc să faceți cast direct: ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() sau ToString(). Verificați IsLinkToContent și LinkSource pentru a afla dacă o proprietate este legată de conținutul documentului (vezi Pasul 3) în loc să conțină o valoare statică.


Pasul 6: Verificați starea de protecție a documentului

BuiltInDocumentProperties.Security raportează o valoare DocumentSecurity care descrie metadatele de protecție stocate ale documentului: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced sau ReadOnlyExceptAnnotations. Citiți această proprietate înainte de a decide dacă este necesară o procesare suplimentară legată de protecție pe un document încărcat.


Probleme comune și remedieri

Indexarea unui CustomDocumentProperties colecție după nume nu returnează nimic utilizabil. Proprietatea nu există în acest document. Apelă Contains(name) mai întâi, sau adaugă proprietatea cu Add(name, value) suprasarcina.

Citirea valorii unei proprietăți personalizate returnează tipul greșit. DocumentProperty.Value este netipizat object; apelantul a presupus un tip care nu se potrivește Type. Utilizaţi accesatorul tipizat corespunzător (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) bazat pe DocumentProperty.Type.

Valoarea unei proprietăţi personalizate legate pare învechită. Proprietatea este legată prin AddLinkToContent, iar conţinutul marcat a fost modificat. Confirmaţi linkSource că marcajul încă marchează intervalul care ar trebui să furnizeze valoarea proprietăţii.

Statistici de cuvinte, cum ar fi Characters or Lines nu corespund conţinutului actual al documentului. Statisticile încorporate reflectă metadatele stocate, nu o numărătoare în timp real. Recalculați și actualizați valorile relevante BuiltInDocumentProperties dacă este necesar un număr actualizat.


Întrebări frecvente

Cum pot citi sau seta autorul și titlul documentului?

Folosiți Document.BuiltInDocumentProperties.Author și .Title direct — sunt proprietăți de tip șir obișnuite în colecția BuiltInDocumentProperties accesată din Document.BuiltInDocumentProperties.

Cum pot adăuga metadate specifice aplicației care nu sunt o proprietate standard Word?

Folosiți Document.CustomDocumentProperties.Add(name, value) cu numele și valoarea proprietății; suprascrierea Add corespunzătoare este selectată în funcție de tipul valorii.

Care este diferența dintre BuiltInDocumentProperties și CustomDocumentProperties?

BuiltInDocumentProperties este setul fix de câmpuri de metadate standard ale Word, accesate ca membri numiți. CustomDocumentProperties este o colecție deschisă, numită, de valori DocumentProperty pentru metadate definite de aplicație, accesată prin nume prin indexer (de ex. properties[name]) și Contains.

Cum pot face ca o proprietate personalizată să urmărească o bucată de conținut din document în loc de o valoare statică?

Folosiți CustomDocumentProperties.AddLinkToContent(name, linkSource), trecând un nume de bookmark ca linkSource; valoarea proprietății va reflecta apoi conținutul marcat cu acel bookmark.

Cum pot verifica dacă un document este protejat prin parolă?

Citiți Document.BuiltInDocumentProperties.Security, o valoare DocumentSecurity; PasswordProtected indică faptul că metadatele stocate ale documentului declară protecție prin parolă.


Vezi și:

 Română