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, Author und Subject vor dem Speichern – Word und andere Anwendungen lesen diese aus BuiltInDocumentProperties für Dokumentlisten und die Suchindizierung.
  • Verwenden Sie DocumentProperty.Type, um die PropertyType einer 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 vorhandene FieldDocProperty-, FieldAuthor- oder FieldComments-Felder die neuen Werte übernehmen.
  • BuiltInDocumentProperties und CustomDocumentProperties sind sowohl auf PlainTextDocument als auch auf Document verfügbar, sodass Metadaten auch dann übertragen werden, wenn der geladene Inhalt reiner Text ist.

Häufige Probleme

ProblemUrsacheLösung
Der Indexer gibt null für eine benutzerdefinierte Eigenschaft zurückDie Eigenschaft wurde noch nicht hinzugefügtRufen 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 WertDas Feld wurde nicht aktualisiertRufen Sie Update() für das Feld auf, oder Document.UpdateFields(), um jedes Feld im Dokument zu aktualisieren.
DocumentProperty.ToInt() / ToDateTime() wirftDer 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 / MethodeBeschreibung
Document.BuiltInDocumentPropertiesStandard-OOXML-Metadatensammlung (Author, Title, Pages, usw.)
Document.CustomDocumentPropertiesVon der Anwendung definierte Namens-/Wert-Eigenschaftssammlung
CustomDocumentProperties.Add() / Indexer nach Name / AddLinkToContent()Hinzufügen, Abrufen oder Inhaltsverlinken einer benutzerdefinierten Eigenschaft
DocumentPropertyEinzelner Eigenschaftseintrag; Value, Type, und ToString()/ToInt()/ToDouble()/ToDateTime()/ToBool()/ToByteArray() Konvertierungshilfen
FieldAuthor / FieldComments / FieldDocPropertyAUTHOR, COMMENTS und DOCPROPERTY Felder; Update(), Result, GetFieldCode()
DocumentBuilder.InsertField()Fügt ein Feld per Feldcode oder FieldType ein

Siehe auch

 Deutsch