Cómo trabajar con las propiedades del documento en .NET

Cómo trabajar con las propiedades del documento en .NET

Cómo trabajar con las propiedades del documento en .NET

Cada documento de Word contiene dos categorías de metadatos — los campos estándar que Word rastrea para cada archivo, y cualquier valor definido por la aplicación que un programa haya añadido. Esta guía muestra cómo leer y establecer ambos con Aspose.Words FOSS para .NET, usando Document.BuiltInDocumentProperties y Document.CustomDocumentProperties, ambos construidos en última instancia sobre la misma representación DocumentProperty.


Guía paso a paso

Paso 1: Leer y establecer propiedades de documento incorporadas

Document.BuiltInDocumentProperties devuelve una colección BuiltInDocumentProperties. Dado que es un conjunto fijo y conocido de propiedades, los valores se leen y escriben como miembros ordinarios en lugar de buscarse por nombre — por ejemplo BuiltInDocumentProperties.Author, .Title, .Subject, .Manager, .Company, .Category, .Keywords y .Comments para campos descriptivos, o .CreatedTime, .LastSavedTime, .LastPrinted y .LastSavedBy para marcas de tiempo. Estadísticas como .Characters, .CharactersWithSpaces, .Lines y .Bytes también se exponen de esta manera, junto a .Template y .HyperlinkBase.


Paso 2: Añadir una propiedad de documento personalizada

Document.CustomDocumentProperties devuelve una colección CustomDocumentProperties para metadatos definidos por la aplicación que no forman parte del conjunto incorporado de Word. Llame a una de las sobrecargas Add(name, value) con un nombre y un valor tipado — cadena, número, booleano o fecha, según la sobrecarga que coincida con el tipo del valor — para crear una nueva propiedad.


Paso 3: Vincular una Propiedad Personalizada al Contenido del Documento

En lugar de un valor estático, una propiedad personalizada puede rastrear un rango de contenido marcado con un marcador para que su valor permanezca sincronizado con ese contenido. Llame a CustomDocumentProperties.AddLinkToContent(name, linkSource), pasando un nombre de marcador como linkSource, en lugar de volver a sincronizar manualmente una propiedad estática cada vez que el contenido vinculado cambie.


Paso 4: Buscar, Verificar y Eliminar Propiedades

Tanto BuiltInDocumentProperties como CustomDocumentProperties derivan del abstracto DocumentPropertyCollection, por lo que se inspeccionan de la misma manera: indexar por nombre (p. ej., properties[name]) recupera una propiedad, Contains(name) verifica si existe, IndexOf(name) devuelve su posición y Count indica cuántas propiedades contiene la colección. Llame a Contains(name) antes de indexar por nombre cuando una propiedad personalizada pueda no existir, para evitar manejar una propiedad faltante como una ruta de excepción. Elimine una propiedad con Remove(name) o RemoveAt(index), o limpie todas las propiedades de la colección con Clear().


Paso 5: Leer el Valor de una Propiedad Personalizada sin Conocer su Tipo de Antemano

Un DocumentProperty tiene un Name, un Value sin tipo, y un Type — un valor de enumeración PropertyType: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray o Other. Debido a que Value no tiene tipo, use el accesor tipado correspondiente en lugar de convertir directamente: ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() o ToString(). Verifique IsLinkToContent y LinkSource para averiguar si una propiedad está vinculada al contenido del documento (ver Paso 3) en lugar de contener un valor estático.


Paso 6: Verificar el Estado de Protección de un Documento

BuiltInDocumentProperties.Security informa un valor DocumentSecurity que describe los metadatos de protección almacenados del documento: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced o ReadOnlyExceptAnnotations. Lea esta propiedad antes de decidir si se necesita un procesamiento adicional relacionado con la protección en un documento cargado.


Problemas comunes y soluciones

Indexar un CustomDocumentProperties una colección por nombre no devuelve nada utilizable. La propiedad no existe en este documento. Llame Contains(name) primero, o añada la propiedad con el apropiado Add(name, value) sobrecarga.

Leer el valor de una propiedad personalizada devuelve el tipo incorrecto. DocumentProperty.Value no está tipado object; el llamador asumió un tipo que no coincide Type. Utilice el accesor tipado correspondiente (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) basado en DocumentProperty.Type.

Un valor de propiedad personalizada vinculada parece obsoleto. La propiedad está vinculada a través de AddLinkToContent, y el contenido marcado cambió. Confirme el linkSource marcador sigue marcando el rango que debe alimentar el valor de la propiedad.

Estadísticas de Word como Characters or Lines no coinciden con el contenido actual real del documento. Las estadísticas integradas reflejan los metadatos almacenados, no un recuento en tiempo real. Recalcula y actualiza los BuiltInDocumentProperties valores si se requiere un recuento actualizado.


Preguntas frecuentes

¿Cómo leo o establezco el autor y el título del documento?

Utiliza Document.BuiltInDocumentProperties.Author y .Title directamente — son propiedades de cadena ordinarias en la colección BuiltInDocumentProperties a la que se accede desde Document.BuiltInDocumentProperties.

¿Cómo agrego metadatos específicos de la aplicación que no son una propiedad estándar de Word?

Utiliza Document.CustomDocumentProperties.Add(name, value) con el nombre y el valor de la propiedad; se selecciona la sobrecarga Add correspondiente según el tipo del valor.

¿Cuál es la diferencia entre BuiltInDocumentProperties y CustomDocumentProperties?

BuiltInDocumentProperties es el conjunto fijo de campos de metadatos estándar de Word, accesibles como miembros con nombre. CustomDocumentProperties es una colección abierta y con nombre de valores DocumentProperty para metadatos definidos por la aplicación, accesible por nombre mediante el indexador (p. ej., properties[name]) y Contains.

¿Cómo hago que una propiedad personalizada siga una parte del contenido del documento en lugar de un valor estático?

Utiliza CustomDocumentProperties.AddLinkToContent(name, linkSource), pasando un nombre de marcador como linkSource; el valor de la propiedad entonces refleja ese contenido marcado.

¿Cómo verifico si un documento está protegido con contraseña?

Lea Document.BuiltInDocumentProperties.Security, un valor DocumentSecurity; PasswordProtected indica que los metadatos almacenados del documento declaran protección con contraseña.


Ver también

 Español