Dokumentinformationen
Dokumentinformationen
Dieser Leitfaden zeigt, wie man Dokumentmetadaten mit Aspose.Words FOSS für .NET liest und schreibt. Jede geladene oder neu erstellte Document enthält zwei Arten von Metadaten neben ihrem Inhalt: ein festes Set an eingebauten Eigenschaften (Autor, Titel, Wortanzahl und Ähnliches) und ein offenes Set an benutzerdefinierten Eigenschaften, die Sie selbst definieren. Aspose.Words FOSS für .NET implementiert zudem die Word-Felder, die diese Metadaten im Dokumentkörper anzeigen — AUTHOR, COMMENTS und DOCPROPERTY — sodass Eigenschaftswerte als live, aktualisierbarer Text erscheinen können.
Eingebaute Dokumenteigenschaften
Document.BuiltInDocumentProperties gibt eine BuiltInDocumentProperties-Auflistung zurück, die für jedes Standard-Word-Metadatenfeld eine Eigenschaft enthält: Author, Title, Subject, Comments, Category, Company, Manager, Keywords, CreatedTime, LastSavedTime, LastSavedBy, LastPrinted, RevisionNumber, TotalEditingTime und Statistiken wie Pages, Words, Characters, CharactersWithSpaces, Paragraphs und Lines. Da BuiltInDocumentProperties von DocumentPropertyCollection abgeleitet ist, unterstützt es außerdem die Suche nach Name über seinen Indexer Contains(), IndexOf() und die Aufzählung über GetEnumerator(). Die gleiche Auflistung wird auf PlainTextDocument.BuiltInDocumentProperties bereitgestellt, wenn mit Klartext-Eingaben gearbeitet wird.
Benutzerdefinierte Dokumenteigenschaften
Document.CustomDocumentProperties gibt eine CustomDocumentProperties-Auflistung für Eigenschaften zurück, die eine Anwendung selbst definiert — beliebige Namens-/Wert-Paare, die Word neben dem eingebauten Satz speichert. Fügen Sie eine Eigenschaft mit Add(name, value) hinzu, die über CustomDocumentProperties für die Werttypen, die eine Eigenschaft halten kann, überladen ist; rufen Sie eine per Namen über den Indexer ab, z.B. properties[name]; und entfernen Sie Einträge mit Remove(name), RemoveAt(index) oder Clear(). AddLinkToContent(name, linkSource) erzeugt eine Eigenschaft, deren Wert mit einem Lesezeichen oder Bereich im Dokument verknüpft ist, anstatt als fester Wert gespeichert zu werden.
Jeder Eintrag in beiden Auflistungen — eingebaut oder benutzerdefiniert — ist ein DocumentProperty, das Name, Value und Type (einen PropertyType-Wert: String, Number, Double, Boolean, DateTime, StringArray, ObjectArray, ByteArray oder Other) bereitstellt, sowie IsLinkToContent und LinkSource für verknüpfte Eigenschaften. DocumentProperty stellt Konvertierungshilfen wie ToString(), ToInt(), ToDouble(), ToDateTime(), ToBool() und ToByteArray() bereit, um den zugrunde liegenden Wert im gewünschten .NET-Typ abzurufen.
Dokumentinformationsfelder
Drei Field-Unterklassen stellen Dokumentmetadaten als Felder im Dokumentkörper selbst bereit: FieldAuthor (das AUTHOR-Feld mit einer AuthorName-Eigenschaft), FieldComments (das COMMENTS-Feld mit einer Text-Eigenschaft) und FieldDocProperty (das DOCPROPERTY-Feld, das eine benannte Dokumenteneigenschaft— eingebaut oder benutzerdefiniert— in das Dokument einliest). Wie jede Field teilen diese drei den Basis-Field-Lebenszyklus: GetFieldCode(), um den zugrunde liegenden Feldcode zu lesen, Result / DisplayResult, um den zuletzt berechneten Wert zu lesen, Update(), um den Wert neu zu berechnen, Unlink(), um das Feld durch sein statisches Ergebnis zu ersetzen, und Remove(), um es zu löschen. Fügen Sie ein Dokumentinformationsfeld mit DocumentBuilder.InsertField(fieldCode) ein – zum Beispiel einen Feldcode von AUTHOR oder DOCPROPERTY "Company" – oder mit der InsertField(fieldType, updateField)-Überladung unter Verwendung eines FieldType-Werts wie FieldType.FieldAuthor, FieldType.FieldComments oder FieldType.FieldDocProperty.
Weil FieldDocProperty jede Dokumenteneigenschaft liest, an die es gebunden ist, führt das Ändern des zugrunde liegenden BuiltInDocumentProperties- oder CustomDocumentProperties-Werts und anschließend das Aufrufen von Update() – oder Document.UpdateFields(), um jedes Feld im Dokument auf einmal zu aktualisieren – dazu, dass der neue Wert in das angezeigte Ergebnis des Feldes übernommen wird.
Tipps und bewährte Vorgehensweisen
- Setzen Sie integrierte Eigenschaften wie
Title,AuthorundSubjectvor dem Speichern – Word und andere Anwendungen lesen diese ausBuiltInDocumentPropertiesfür Dokumentlisten und die Suchindizierung. - Verwenden Sie
DocumentProperty.Type, um diePropertyTypeeiner Eigenschaft zu prüfen, bevor Sie einen bestimmten Konvertierungshelfer (ToInt(),ToDateTime()usw.) aufrufen, um eine Konvertierungsinkongruenz bei einer Eigenschaft zu vermeiden, die Sie nicht selbst erstellt haben. AddLinkToContent()hält eine benutzerdefinierte Eigenschaft synchronisiert mit dem Dokumentinhalt (wie einem Lesezeichen-Bereich) anstatt eines festen Werts – verwenden Sie es, wenn die Eigenschaft stets das aktuelle Dokument widerspiegeln soll.- Rufen Sie
Document.UpdateFields()auf, nachdem Sie Dokumenteigenschaften geändert haben, damit bereits im Dokumentkörper vorhandeneFieldDocProperty-,FieldAuthor- oderFieldComments-Felder die neuen Werte übernehmen. BuiltInDocumentPropertiesundCustomDocumentPropertiessind sowohl aufPlainTextDocumentals auch aufDocumentverfügbar, sodass Metadaten auch dann übertragen werden, wenn der geladene Inhalt reiner Text ist.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
Der Indexer gibt null für eine benutzerdefinierte Eigenschaft zurück | Die Eigenschaft wurde noch nicht hinzugefügt | Rufen Sie zuerst CustomDocumentProperties.Add(name, value) auf oder prüfen Sie Contains(name), bevor Sie lesen |
FieldDocProperty zeigt nach dem Ändern einer Eigenschaft einen veralteten Wert | Das Feld wurde nicht aktualisiert | Rufen Sie Update() für das Feld auf, oder Document.UpdateFields(), um jedes Feld im Dokument zu aktualisieren. |
DocumentProperty.ToInt() / ToDateTime() wirft | Der tatsächliche Type der Eigenschaft stimmt nicht mit der angeforderten Konvertierung überein. | Überprüfen Sie DocumentProperty.Type, bevor Sie wählen, welchen Conversion Helper Sie aufrufen. |
FAQ
Was ist der Unterschied zwischen integrierten und benutzerdefinierten Dokumenteigenschaften?
Integrierte Eigenschaften (Document.BuiltInDocumentProperties) sind ein fester Satz, der vom OOXML-Format definiert wird — Author, Title, Pages und ähnliche. Benutzerdefinierte Eigenschaften (Document.CustomDocumentProperties) sind ein offenes, anwendungsdefiniertes Set von Name/Wert-Paaren, das mit Add() hinzugefügt wird.
Wie kann ich eine benutzerdefinierte Eigenschaft dazu bringen, Dokumentinhalt zu verfolgen statt eines festen Werts?
Verwenden Sie CustomDocumentProperties.AddLinkToContent(name, linkSource), das den Wert der Eigenschaft mit einem Lesezeichen oder einem Bereich im Dokument verknüpft, anstatt einen statischen Wert zu speichern.
Aktualisiert das Aktualisieren einer Dokumenteigenschaft automatisch die Felder, die sie anzeigen?
Nein — rufen Sie Update() für das spezifische Feld auf oder Document.UpdateFields(), um jedes Feld im Dokument neu zu berechnen, einschließlich FieldDocProperty, FieldAuthor und FieldComments Instanzen.
Kann ich Dokumenteigenschaften aus einem Klartextdokument auslesen?
Ja. PlainTextDocument stellt die gleichen BuiltInDocumentProperties und CustomDocumentProperties Eigenschaften wie Document zur Verfügung.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
Document.BuiltInDocumentProperties | Standard-OOXML-Metadatensammlung (Author, Title, Pages, usw.) |
Document.CustomDocumentProperties | Von der Anwendung definierte Namens-/Wert-Eigenschaftssammlung |
CustomDocumentProperties.Add() / Indexer nach Name / AddLinkToContent() | Hinzufügen, Abrufen oder Inhaltsverlinken einer benutzerdefinierten Eigenschaft |
DocumentProperty | Einzelner Eigenschaftseintrag; Value, Type, und ToString()/ToInt()/ToDouble()/ToDateTime()/ToBool()/ToByteArray() Konvertierungshilfen |
FieldAuthor / FieldComments / FieldDocProperty | AUTHOR, COMMENTS und DOCPROPERTY Felder; Update(), Result, GetFieldCode() |
DocumentBuilder.InsertField() | Fügt ein Feld per Feldcode oder FieldType ein |