Hur man arbetar med dokumentegenskaper i .NET

Hur man arbetar med dokumentegenskaper i .NET

Hur man arbetar med dokumentegenskaper i .NET

Varje Word-dokument innehåller två kategorier av metadata — de standardfält som Word spårar för varje fil, och eventuella applikationsdefinierade värden som ett program har lagt till. Denna guide visar hur man läser och sätter båda med Aspose.Words FOSS för .NET, med hjälp av Document.BuiltInDocumentProperties och Document.CustomDocumentProperties, som båda i slutändan är byggda på samma DocumentProperty representation.


Steg-för-steg-guide

Steg 1: Läs och ange inbyggda dokumentegenskaper

Document.BuiltInDocumentProperties returnerar en BuiltInDocumentProperties samling. Eftersom det är en fast, känd uppsättning egenskaper läses och skrivs värden som vanliga medlemmar snarare än att slås upp efter namn — till exempel BuiltInDocumentProperties.Author, .Title, .Subject, .Manager, .Company, .Category, .Keywords och .Comments för beskrivande fält, eller .CreatedTime, .LastSavedTime, .LastPrinted och .LastSavedBy för tidsstämplar. Statistik såsom .Characters, .CharactersWithSpaces, .Lines och .Bytes exponeras också på detta sätt, tillsammans med .Template och .HyperlinkBase.


Steg 2: Lägg till en anpassad dokumentegenskap

Document.CustomDocumentProperties returnerar en CustomDocumentProperties samling för programdefinierad metadata som inte är en del av Words inbyggda uppsättning. Anropa en av Add(name, value) överlagringarna med ett namn och ett typat värde — sträng, nummer, boolesk eller datum, beroende på vilken överlagring som matchar värdets typ — för att skapa en ny egenskap.


Steg 3: Länka en anpassad egenskap till dokumentinnehåll

Istället för ett statiskt värde kan en anpassad egenskap spåra ett bokmärkt område av innehåll så att dess värde hålls i synk med det innehållet. Anropa CustomDocumentProperties.AddLinkToContent(name, linkSource) och skicka ett bokmärkesnamn som linkSource, snarare än att manuellt åter-synkronisera en statisk egenskap varje gång det länkade innehållet förändras.


Steg 4: Söka upp, kontrollera och ta bort egenskaper

Både BuiltInDocumentProperties och CustomDocumentProperties härstammar från den abstrakta DocumentPropertyCollection, så de inspekteras på samma sätt: indexering efter namn (t.ex. properties[name]) hämtar en egenskap, Contains(name) kontrollerar om den finns, IndexOf(name) returnerar dess position, och Count rapporterar hur många egenskaper samlingen innehåller. Anropa Contains(name) innan du indexerar efter namn när en anpassad egenskap kanske inte finns, för att undvika att hantera en saknad egenskap som ett undantagsflöde. Ta bort en egenskap med Remove(name) eller RemoveAt(index), eller rensa alla egenskaper i samlingen med Clear().


Steg 5: Läs ett anpassat egenskapsvärde utan att i förväg känna till dess typ

En DocumentProperty har en Name, en otypad Value, och en Type — ett PropertyType enum-värde: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray eller Other. Eftersom Value är otypad, använd den matchande typade åtkomsten istället för att kasta direkt: ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() eller ToString(). Kontrollera IsLinkToContent och LinkSource för att ta reda på om en egenskap är länkat till dokumentinnehåll (se Steg 3) snarare än att inneha ett statiskt värde.


Steg 6: Kontrollera ett dokuments skyddsstatus

BuiltInDocumentProperties.Security rapporterar ett DocumentSecurity värde som beskriver dokumentets lagrade skyddsmetadata: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced eller ReadOnlyExceptAnnotations. Läs den här egenskapen innan du beslutar om ytterligare skyddsrelaterad bearbetning behövs på ett inläst dokument.


Vanliga problem och lösningar

Indexering av en CustomDocumentProperties samling efter namn returnerar inget användbart. Egenskapen finns inte i detta dokument. Anropa Contains(name) först, eller lägg till egenskapen med lämplig Add(name, value) överladdning.

Att läsa ett anpassat egenskapsvärde ger fel typ. DocumentProperty.Value är utan typ object; anroparen antog en typ som inte matchar Type. Använd den motsvarande typade åtkomstmetoden (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) baserat på DocumentProperty.Type.

Ett länkat anpassat egenskapsvärde ser föråldrat ut. Egenskapen är länkad via AddLinkToContent, och det bokmärkta innehållet har ändrats. Bekräfta att linkSource bokmärket fortfarande markerar det intervall som ska mata egenskapens värde.

Ordstatistik såsom Characters or Lines stämmer inte överens med dokumentets faktiska aktuella innehåll. Inbyggd statistik återspeglar lagrad metadata, inte en live-återräkning. Beräkna om och uppdatera de relevanta BuiltInDocumentProperties värden om en uppdaterad räkning krävs.


Vanliga frågor

Hur läser eller sätter jag dokumentets författare och titel?

Använd Document.BuiltInDocumentProperties.Author och .Title direkt — de är vanliga strängegenskaper i BuiltInDocumentProperties-samlingen som nås från Document.BuiltInDocumentProperties.

Hur lägger jag till applikationsspecifik metadata som inte är en standard-Word-egenskap?

Använd Document.CustomDocumentProperties.Add(name, value) med egenskapens namn och värde; den matchande Add-överladdningen väljs baserat på värdets typ.

Vad är skillnaden mellan BuiltInDocumentProperties och CustomDocumentProperties?

BuiltInDocumentProperties är Words fasta uppsättning av standardmetadatafält, åtkomliga som namngivna medlemmar. CustomDocumentProperties är en öppen, namngiven samling av DocumentProperty-värden för applikationsdefinierad metadata, åtkomlig via namn med indexeraren (t.ex. properties[name]) och Contains.

Hur får jag en anpassad egenskap att spåra en del av dokumentets innehåll istället för ett statiskt värde?

Använd CustomDocumentProperties.AddLinkToContent(name, linkSource) och skicka ett bokmärkesnamn som linkSource; egenskapens värde reflekterar då det bokmärkta innehållet.

Hur kontrollerar jag om ett dokument är lösenordsskyddat?

Läs Document.BuiltInDocumentProperties.Security, ett DocumentSecurity värde; PasswordProtected indikerar att dokumentets lagrade metadata deklarerar lösenordsskydd.


Se även

 Svenska