Dokumentinformation
Dokumentinformation
Denna guide visar hur man läser och skriver dokumentmetadata med Aspose.Words FOSS för .NET. Varje laddad eller nyss skapad Document bär två typer av metadata tillsammans med sitt innehåll: en fast uppsättning inbyggda egenskaper (författare, titel, ordantal och liknande) och en öppet definierbar uppsättning anpassade egenskaper som du själv definierar. Aspose.Words FOSS för .NET implementerar också Word-fält som visar denna metadata i dokumentkroppen — AUTHOR, COMMENTS och DOCPROPERTY — så egenskapsvärden kan visas som levande, uppdaterbar text.
Inbyggda dokumentegenskaper
Document.BuiltInDocumentProperties returnerar en BuiltInDocumentProperties samling med en egenskap för varje standard Word-metadatafält: Author, Title, Subject, Comments, Category, Company, Manager, Keywords, CreatedTime, LastSavedTime, LastSavedBy, LastPrinted, RevisionNumber, TotalEditingTime och statistik såsom Pages, Words, Characters, CharactersWithSpaces, Paragraphs och Lines. Eftersom BuiltInDocumentProperties härstammar från DocumentPropertyCollection stödjer den också uppslagning efter namn via sin indexerare, Contains(), IndexOf() och uppräkning via GetEnumerator(). Samma samling exponeras på PlainTextDocument.BuiltInDocumentProperties när du arbetar med vanlig textinmatning.
Anpassade dokumentegenskaper
Document.CustomDocumentProperties returnerar en CustomDocumentProperties samling för egenskaper som en applikation själv definierar — godtyckliga namn/värde-par som Word lagrar tillsammans med den inbyggda uppsättningen. Lägg till en egenskap med Add(name, value), som är överlagrad över CustomDocumentProperties för de värdetyper en egenskap kan innehålla; hämta en efter namn med indexeraren, t.ex. properties[name]; och ta bort poster med Remove(name), RemoveAt(index) eller Clear(). AddLinkToContent(name, linkSource) skapar en egenskap vars värde är länkat till ett bokmärke eller ett område i dokumentet snarare än lagrat som ett fast värde.
Varje post i någon av samlingarna — inbyggd eller anpassad — är en DocumentProperty, som exponerar Name, Value och Type (ett PropertyType värde: String, Number, Double, Boolean, DateTime, StringArray, ObjectArray, ByteArray eller Other), samt IsLinkToContent och LinkSource för länkade egenskaper. DocumentProperty tillhandahåller konverteringshjälpmedel såsom ToString(), ToInt(), ToDouble(), ToDateTime(), ToBool() och ToByteArray() för att hämta det underliggande värdet i önskad .NET-typ.
Dokumentinformationsfält
Tre Field underklasser exponerar dokumentmetadata som fält i dokumentets kropp: FieldAuthor (fältet AUTHOR, med en AuthorName egenskap), FieldComments (fältet COMMENTS, med en Text egenskap), och FieldDocProperty (fältet DOCPROPERTY, som läser en namngiven dokumentegenskap — inbyggd eller anpassad — in i dokumentet). Precis som varje Field delar dessa tre den grundläggande Field livscykeln: GetFieldCode() för att läsa den underliggande fältkoden, Result / DisplayResult för att läsa det senast beräknade värdet, Update() för att beräkna om värdet, Unlink() för att ersätta fältet med dess statiska resultat, och Remove() för att ta bort det. Infoga ett dokumentinformationsfält med DocumentBuilder.InsertField(fieldCode) — till exempel en fältkod av AUTHOR eller DOCPROPERTY "Company" — eller med InsertField(fieldType, updateField) överlagring som använder ett FieldType värde såsom FieldType.FieldAuthor, FieldType.FieldComments eller FieldType.FieldDocProperty.
Eftersom FieldDocProperty läser vilken dokumentegenskap den är bunden till, kommer en ändring av det underliggande BuiltInDocumentProperties eller CustomDocumentProperties värdet och sedan ett anrop av Update() — eller Document.UpdateFields() för att uppdatera alla fält i dokumentet på en gång — att föra över det nya värdet till fältets visade resultat.
Tips och bästa praxis
- Ställ in inbyggda egenskaper såsom
Title,AuthorochSubjectinnan du sparar — Word och andra konsumenter läser dessa frånBuiltInDocumentPropertiesför dokumentlistor och sökindexering. - Använd
DocumentProperty.Typeför att kontrollera en egenskapsPropertyTypeinnan du anropar en specifik konverteringshjälpare (ToInt(),ToDateTime()osv.) för att undvika en konverteringsmissmatch på en egenskap du inte själv har skapat. AddLinkToContent()håller en anpassad egenskap synkroniserad med dokumentinnehållet (t.ex. ett bokmärkt område) istället för ett fast värde — använd den när egenskapen alltid ska återspegla vad som för närvarande finns i dokumentet.- Anropa
Document.UpdateFields()efter att du har ändrat dokumentegenskaper så att eventuellaFieldDocProperty,FieldAuthorellerFieldCommentsfält som redan finns i dokumentkroppen tar emot de nya värdena. BuiltInDocumentPropertiesochCustomDocumentPropertiesfinns både påPlainTextDocumentsåväl somDocument, så metadata kan överföras vidare även när det laddade innehållet är vanlig text.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
Indexern returnerar null för en anpassad egenskap | Egenskapen har ännu inte lagts till | Anropa CustomDocumentProperties.Add(name, value) först, eller kontrollera Contains(name) innan du läser |
FieldDocProperty visar ett föråldrat värde efter att en egenskap har ändrats | Fältet uppdaterades inte | Anropa Update() på fältet, eller Document.UpdateFields() för att uppdatera varje fält i dokumentet |
DocumentProperty.ToInt() / ToDateTime() kastar | Egendomens faktiska Type matchar inte den begärda konverteringen | Kontrollera DocumentProperty.Type innan du väljer vilken konverteringshjälpare som ska anropas |
FAQ
Vad är skillnaden mellan inbyggda och anpassade dokumentegenskaper?
Inbyggda egenskaper (Document.BuiltInDocumentProperties) är en fast uppsättning som definieras av OOXML-formatet — Author, Title, Pages och liknande. Anpassade egenskaper (Document.CustomDocumentProperties) är en öppen, applikationsdefinierad samling av namn/värde-par som läggs till med Add().
Hur får jag en anpassad egenskap att spåra dokumentinnehåll istället för ett fast värde?
Använd CustomDocumentProperties.AddLinkToContent(name, linkSource), som länkar egenskapens värde till ett bokmärke eller ett område i dokumentet istället för att lagra ett statiskt värde.
Uppdaterar en ändring av en dokumentegenskap automatiskt fält som visar den?
Nej — anropa Update() på det specifika fältet eller Document.UpdateFields() för att beräkna om varje fält i dokumentet, inklusive FieldDocProperty, FieldAuthor och FieldComments instanser.
Kan jag läsa dokumentegenskaper från ett rentextdokument?
Ja. PlainTextDocument exponerar samma BuiltInDocumentProperties och CustomDocumentProperties egenskaper som Document.
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
Document.BuiltInDocumentProperties | Standard OOXML-metadatainsamling (Author, Title, Pages, osv.) |
Document.CustomDocumentProperties | Applikationsdefinierad namn/värde-egenskapskollektion |
CustomDocumentProperties.Add() / indexering efter namn / AddLinkToContent() | Lägg till, hämta eller länka innehåll för en anpassad egenskap |
DocumentProperty | Enskild egenskapspost; Value, Type, och ToString()/ToInt()/ToDouble()/ToDateTime()/ToBool()/ToByteArray() konverteringshjälpmedel |
FieldAuthor / FieldComments / FieldDocProperty | AUTHOR, COMMENTS och DOCPROPERTY fält; Update(), Result, GetFieldCode() |
DocumentBuilder.InsertField() | Infogar ett fält med fältkod eller FieldType |