如何在 .NET 中使用文档属性

如何在 .NET 中使用文档属性

如何在 .NET 中使用文档属性

每个 Word 文档都有两类元数据——Word 为每个文件跟踪的标准字段,以及程序添加的任何应用程序定义的值。本指南展示了如何使用 Aspose.Words FOSS for .NET,并利用 Document.BuiltInDocumentProperties 和 Document.CustomDocumentProperties(它们最终都是基于相同的 DocumentProperty 表示)来读取和设置这两类元数据。


分步指南

步骤 1:读取和设置内置文档属性

Document.BuiltInDocumentProperties 返回一个 BuiltInDocumentProperties 集合。由于这是一组固定且已知的属性,值被作为普通成员读取和写入,而不是通过名称查找——例如用于描述性字段的 BuiltInDocumentProperties.Author、.Title、.Subject、.Manager、.Company、.Category、.Keywords 和 .Comments,或用于时间戳的 .CreatedTime、.LastSavedTime、.LastPrinted 和 .LastSavedBy。诸如 .Characters、.CharactersWithSpaces、.Lines、.Bytes 等统计信息也以这种方式公开,同时还有 .Template 和 .HyperlinkBase。


步骤 2:添加自定义文档属性

Document.CustomDocumentProperties 返回一个 CustomDocumentProperties 集合,用于应用程序自定义的元数据,这些元数据不属于 Word 的内置集合。使用带有名称和类型化值(字符串、数字、布尔或日期,取决于哪个重载匹配该值的类型)的 Add(name, value) 重载之一来创建新属性。


步骤 3:将自定义属性链接到文档内容

自定义属性可以跟踪书签范围的内容,而不是使用静态值,从而使其值与该内容保持同步。调用 CustomDocumentProperties.AddLinkToContent(name, linkSource),将书签名称作为 linkSource 传入,而不是在链接的内容更改时手动重新同步静态属性。


步骤 4:查找、检查和移除属性

BuiltInDocumentProperties 和 CustomDocumentProperties 都继承自抽象的 DocumentPropertyCollection,因此它们的检查方式相同:通过名称索引(例如 properties[name])可检索属性,Contains(name) 用于检查属性是否存在,IndexOf(name) 返回属性的位置,Count 报告集合中包含的属性数量。当自定义属性可能不存在时,在按名称索引之前调用 Contains(name),以避免将缺失属性视为异常路径。使用 Remove(name) 或 RemoveAt(index) 移除属性,或使用 Clear() 清除集合中的所有属性。


步骤 5:在事先不知道类型的情况下读取自定义属性的值

一个 DocumentProperty 拥有一个 Name、一个未类型化的 Value,以及一个 Type——即一个 PropertyType 枚举值:Boolean、DateTime、Double、Number、String、StringArray、ObjectArray、ByteArray 或 Other。由于 Value 未类型化,请使用相应的类型化访问器而不是直接强制转换:ToInt()、ToDouble()、ToDateTime()、ToBool()、ToByteArray() 或 ToString()。检查 IsLinkToContent 和 LinkSource 以确定属性是链接到文档内容(参见步骤 3),还是仅保存静态值。


步骤 6:检查文档的保护状态

BuiltInDocumentProperties.Security 报告一个 DocumentSecurity 值,描述文档存储的保护元数据:None、PasswordProtected、ReadOnlyRecommended、ReadOnlyEnforced或ReadOnlyExceptAnnotations。在决定是否需要对已加载的文档进行进一步的保护相关处理之前,请读取此属性。


常见问题和解决方案

索引一个 CustomDocumentProperties 按名称索引的集合返回的内容不可用。 此文档中不存在该属性。Call Contains(name) 首先,或使用适当的方式添加属性 Add(name, value) 重载。

读取自定义属性的值会得到错误的类型。 DocumentProperty.Value 是未类型化的 object; 调用者假设的类型不匹配 Type. 使用相应的已键入访问器(ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) 基于 DocumentProperty.Type.

链接的自定义属性值看起来已过时。 该属性通过 AddLinkToContent,并且已标记的内容已更改。请确认 linkSource 书签仍然标记了应当提供属性值的范围。

Word 统计等 Characters or Lines 与文档的实际当前内容不匹配。 内置统计反映的是已存储的元数据,而非实时计数。重新计算并更新相关 BuiltInDocumentProperties 值,如果需要最新的计数。


常见问题

我如何读取或设置文档的作者和标题?

直接使用 Document.BuiltInDocumentProperties.Author 和 .Title ——它们是位于从 Document.BuiltInDocumentProperties 访问的 BuiltInDocumentProperties 集合中的普通字符串属性。

我如何添加非标准 Word 属性的特定应用程序元数据?

使用 Document.CustomDocumentProperties.Add(name, value) 并提供属性的名称和值;会根据值的类型选择匹配的 Add 重载。

BuiltInDocumentProperties 与 CustomDocumentProperties 有什么区别?

BuiltInDocumentProperties 是 Word 固定的一组标准元数据字段,可作为具名成员访问。CustomDocumentProperties 是一个开放式、具名的 DocumentProperty 值集合,用于应用程序自定义的元数据,可通过索引器按名称访问(例如 properties[name])以及 Contains。

我如何让自定义属性跟踪文档中的某段内容,而不是静态值?

使用 CustomDocumentProperties.AddLinkToContent(name, linkSource),将书签名称作为 linkSource 传入;属性的值随后会反映该书签的内容。

我该如何检查文档是否受密码保护?

读取 Document.BuiltInDocumentProperties.Security,一个 DocumentSecurity 值;PasswordProtected 表明文档的存储元数据声明了密码保护。


另请参阅

 中文