Hoe te werken met Documenteigenschappen in .NET
Hoe te werken met documenteigenschappen in .NET
Elk Word-document bevat twee categorieën metadata — de standaardvelden die Word voor elk bestand bijhoudt, en alle door de toepassing gedefinieerde waarden die een programma heeft toegevoegd. Deze gids laat zien hoe u beide kunt lezen en instellen met Aspose.Words FOSS voor .NET, met behulp van Document.BuiltInDocumentProperties en Document.CustomDocumentProperties, die uiteindelijk beide zijn opgebouwd op dezelfde DocumentProperty-representatie.
Stapsgewijze handleiding
Stap 1: Ingebouwde documenteigenschappen lezen en instellen
Document.BuiltInDocumentProperties retourneert een BuiltInDocumentProperties-collectie. Omdat het een vaste, bekende set eigenschappen betreft, worden waarden gelezen en geschreven als gewone leden in plaats van op naam opgezocht — bijvoorbeeld BuiltInDocumentProperties.Author, .Title, .Subject, .Manager, .Company, .Category, .Keywords en .Comments voor beschrijvende velden, of .CreatedTime, .LastSavedTime, .LastPrinted en .LastSavedBy voor tijdstempels. Statistieken zoals .Characters, .CharactersWithSpaces, .Lines en .Bytes worden op deze manier ook blootgesteld, naast .Template en .HyperlinkBase.
Stap 2: Een aangepaste documenteigenschap toevoegen
Document.CustomDocumentProperties retourneert een CustomDocumentProperties collectie voor toepassingsgedefinieerde metadata die niet deel uitmaakt van de ingebouwde set van Word. Roep een van de Add(name, value) overloads aan met een naam en een getypeerde waarde — string, getal, boolean of datum, afhankelijk van welke overload overeenkomt met het type van de waarde — om een nieuwe eigenschap te maken.
Stap 3: Koppel een aangepaste eigenschap aan documentinhoud
In plaats van een statische waarde kan een aangepaste eigenschap een gemarkeerd bereik van inhoud volgen zodat de waarde synchroon blijft met die inhoud. Roep CustomDocumentProperties.AddLinkToContent(name, linkSource) aan, met een bladwijzernaam als linkSource, in plaats van handmatig een statische eigenschap opnieuw te synchroniseren telkens wanneer de gekoppelde inhoud verandert.
Stap 4: Zoek, Controleer en Verwijder Eigenschappen
Zowel BuiltInDocumentProperties als CustomDocumentProperties zijn afgeleid van de abstracte DocumentPropertyCollection, dus ze worden op dezelfde manier geïnspecteerd: indexeren op naam (bijv. properties[name]) haalt een eigenschap op, Contains(name) controleert of deze bestaat, IndexOf(name) geeft de positie terug, en Count meldt hoeveel eigenschappen de collectie bevat. Roep Contains(name) aan vóór het indexeren op naam wanneer een aangepaste eigenschap mogelijk niet bestaat, om te voorkomen dat een ontbrekende eigenschap als een exceptiepad wordt behandeld. Verwijder een eigenschap met Remove(name) of RemoveAt(index), of maak alle eigenschappen in de collectie leeg met Clear().
Stap 5: Lees de waarde van een aangepaste eigenschap zonder van tevoren het type te kennen
Een DocumentProperty heeft een Name, een ongetypeerde Value, en een Type — een PropertyType enumwaarde: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray of Other. Omdat Value ongetypeerd is, gebruik de bijbehorende getypeerde accessor in plaats van direct te casten: ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() of ToString(). Controleer IsLinkToContent en LinkSource om te achterhalen of een eigenschap gekoppeld is aan documentinhoud (zie Stap 3) in plaats van een statische waarde te bevatten.
Stap 6: Controleer de beschermingsstatus van een document
BuiltInDocumentProperties.Security rapporteert een DocumentSecurity waarde die de opgeslagen beschermingsmetadata van het document beschrijft: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced of ReadOnlyExceptAnnotations. Lees deze eigenschap voordat u beslist of verdere bescherming-gerelateerde verwerking nodig is voor een geladen document.
Veelvoorkomende problemen en oplossingen
Indexeren van een CustomDocumentProperties collectie op naam geeft niets bruikbaars terug. De eigenschap bestaat niet in dit document. Roep Contains(name) eerst, of voeg de eigenschap toe met de juiste Add(name, value) overload.
Het lezen van de waarde van een aangepaste eigenschap geeft het verkeerde type. DocumentProperty.Value is niet getypeerd object; de aanroeper ging uit van een type dat niet overeenkomt Type. Gebruik de overeenkomstige getypeerde accessor (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) DocumentProperty.Type.
De waarde van een gekoppelde aangepaste eigenschap lijkt verouderd. De eigenschap is gekoppeld via AddLinkToContent, en de gemarkeerde inhoud is gewijzigd. Bevestig de linkSource bladwijzer nog steeds het bereik markeert dat de waarde van de eigenschap moet leveren.
Word-statistieken zoals Characters or Lines komen niet overeen met de werkelijke huidige inhoud van het document. Ingebouwde statistieken weerspiegelen opgeslagen metadata, niet een live telling. Herbereken en werk de relevante BuiltInDocumentProperties waarden bij als een up-to-date telling vereist is.
Veelgestelde vragen
Hoe lees of stel ik de auteur en titel van het document in?
Gebruik Document.BuiltInDocumentProperties.Author en .Title rechtstreeks — het zijn gewone string-eigenschappen op de BuiltInDocumentProperties collectie die bereikt wordt via Document.BuiltInDocumentProperties.
Hoe voeg ik toepassingsspecifieke metadata toe die geen standaard Word-eigenschap is?
Gebruik Document.CustomDocumentProperties.Add(name, value) met de naam en waarde van de eigenschap; de bijpassende overload van Add wordt geselecteerd op basis van het type van de waarde.
Wat is het verschil tussen BuiltInDocumentProperties en CustomDocumentProperties?
BuiltInDocumentProperties is de vaste set standaard-metadata-velden van Word, toegankelijk als benoemde leden. CustomDocumentProperties is een open-eind, benoemde collectie van DocumentProperty waarden voor door de applicatie gedefinieerde metadata, toegankelijk via de naam met de indexer (bijv. properties[name]) en Contains.
Hoe laat ik een aangepaste eigenschap een stuk documentinhoud volgen in plaats van een statische waarde?
Gebruik CustomDocumentProperties.AddLinkToContent(name, linkSource), waarbij je een bladwijzernaam doorgeeft als linkSource; de waarde van de eigenschap weerspiegelt dan die bladwijzerinhoud.
Hoe controleer ik of een document wachtwoordbeveiligd is?
Lees Document.BuiltInDocumentProperties.Security, een DocumentSecurity waarde; PasswordProtected geeft aan dat de opgeslagen metadata van het document wachtwoordbeveiliging aangeeft.