如何在 .NET 中加载 Word 文档
如何在 .NET 中加载 Word 文档
Aspose.Words FOSS for .NET 在您构造一个 Document 对象 — 库中的每条加载路径都会通过 Document的构造函数重载以及 LoadOptions 类。本文档展示了如何从文件或流加载文档,提供密码或特定格式的设置,并控制在加载遇到外部资源或可能格式错误的文档时会发生什么。Aspose.Words FOSS for .NET 是从源码构建的,并直接在项目中引用,而不是从软件包源安装 — 请参阅 安装指南 用于在执行以下任务之前的构建步骤。
逐步指南
步骤 1:从文件或流加载文档
Document 有五个构造函数。Document() 创建一个全新的空文档,而不是加载现有文档。Document(fileName) 直接从磁盘路径加载,Document(stream) 则从任何可读取的 Stream 加载——当源不是文件时非常有用,例如已在内存中的内容或通过网络连接接收的内容。两者都有一个伴随的重载接受第二个参数 Document(fileName, loadOptions) 和 Document(stream, loadOptions),该参数是本指南中所有其他任务的入口点。
步骤 2:加载受密码保护的文档
在调用 Document(fileName, loadOptions)(或流重载)之前,使用密码构造一个 LoadOptions。new LoadOptions(password) 直接设置 LoadOptions.Password;或者,在传入之前,在无参数的 LoadOptions() 实例上设置 Password。提前提供密码,而不是先加载后因失败而响应——Aspose.Words 用于 .NET 的 FOSS 必须使用密码才能解析受保护的文件,因此不存在部分加载状态可供恢复。
步骤 3:为文本和 Markdown 源应用特定格式选项
纯文本和 Markdown 源接受基类 LoadOptions 未公开的设置。TxtLoadOptions 添加 AutoNumberingDetection 和 DetectNumberingWithWhitespaces 用于识别纯文本中的编号列表,DetectHyperlinks 用于将裸 URL 转换为超链接,DocumentDirection(LeftToRight、RightToLeft 或 Auto)用于文本流向,并提供独立的 LeadingSpacesOptions/TrailingSpacesOptions(类型为 TxtLeadingSpacesOptions/TxtTrailingSpacesOptions)用于处理每行开头和结尾的空白。MarkdownLoadOptions 添加 PreserveEmptyLines、ImportUnderlineFormatting 和 SoftLineBreakCharacter,用于控制 Markdown 换行约定如何映射到段落和运行。两个子类都继承自 LoadOptions,因此在任一子类上设置的密码或资源加载回调行为与基类相同——将特定格式的实例传递给 Document(fileName, loadOptions) 时,方式与传递普通的 LoadOptions 完全一致。
步骤 4:在加载期间重定向或拦截外部资源
当需要在加载时控制文档引用的外部资源的解析方式时,将 LoadOptions.ResourceLoadingCallback 设置为 IResourceLoadingCallback 的实现。其 ResourceLoading(args) 方法接收一个描述资源 ResourceType(Image、Font、CssStyleSheet 或 Document)的 ResourceLoadingArgs,以及 Uri 和 OriginalUri,并返回一个 ResourceLoadingAction——Default 表示正常加载资源,Skip 表示省略它,或 UserProvided 表示使用通过 ResourceLoadingArgs.SetData(data) 提供的数据进行替换。
步骤 5:设置语言默认值和恢复行为
当文档的语言元数据缺失或不可靠时,在加载之前将 LoadOptions.LanguagePreferences.DefaultEditingLanguage 设置为 EditingLanguage 值,并在 LanguagePreferences 上使用 AddEditingLanguage(language) 或 AddEditingLanguages(languages) 注册文档可能包含的其他语言。对于可能格式错误的源,将 LoadOptions.RecoveryMode 设置为 DocumentRecoveryMode 值——None 表示在不进行任何恢复尝试的情况下加载,或 TryRecover 表示让加载器绕过某些结构性问题,而不是直接加载失败。
常见问题及解决方案
在提供密码后,加载受密码保护的文档仍会抛出异常。 确认密码已在确切的 LoadOptions 传递给的实例 Document(fileName, loadOptions) (或流重载)— 通过 new LoadOptions(password) 或通过设置 Password 随后 — 并且这就是实际传递给构造函数的对象。A LoadOptions 已创建但从未交给 Document 对加载没有影响。
文本或 Markdown 特定设置似乎没有生效。 检查是否有 TxtLoadOptions or MarkdownLoadOptions 实例 — 不是基类 LoadOptions — 被传递给 Document 构造函数。只有子类公开特定格式的属性;传入基类虽然可以编译通过,但会悄悄丢失这些属性。
外部资源未被拦截或重定向。 ResourceLoadingCallback 必须设置在相同的 LoadOptions 传递给的对象 Document 构造函数,且必须在调用 load 之前分配。加载完成后再进行分配将不会产生任何效果。
设置后,格式错误的文档仍然加载失败 RecoveryMode. DocumentRecoveryMode.TryRecover 允许加载器绕过文档中的某些结构性问题,但更严重的损坏仍可能导致文档无法成功加载。
从 a 加载的文档 Stream 其行为不同于通过路径加载的同一文件。 在将其传递给之前,请验证流的位置位于起始处。 Document(stream) or Document(stream, loadOptions) — 如果流在内容中途被截断,只会加载剩余的字节。
常见问题解答
如何在不使用任何特殊选项的情况下加载文档?
将文件路径或 Stream 直接传递给 Document(fileName) 或 Document(stream) —— 仅在需要密码、特定格式设置或回调时才需要 LoadOptions。
LoadOptions、TxtLoadOptions 和 MarkdownLoadOptions 有什么区别?
TxtLoadOptions 和 MarkdownLoadOptions 都继承自 LoadOptions,并分别添加针对纯文本和 Markdown 源的特定设置。每个通用的 LoadOptions 属性 —— 密码、编码、回调 —— 在任一子类中仍然可用。
我可以直接从字节数组加载文档吗?
将字节包装在 MemoryStream 中,并将该流传递给 Document(stream) 或 Document(stream, loadOptions) —— 没有直接接受字节数组的构造函数。
当加载器无法解析外部资源时,我该如何控制其行为?
实现 IResourceLoadingCallback 并将其分配给 LoadOptions.ResourceLoadingCallback。从 ResourceLoading(args) 返回 ResourceLoadingAction.Skip 以省略该资源,而不是让加载失败。
设置 RecoveryMode 会改变格式正确的文档加载方式吗?
No. DocumentRecoveryMode 只在加载器实际遇到结构性问题时才会改变行为——即使文档格式良好,也会以相同方式加载,无论设置如何。