6

我的用户喜欢将受密码保护的 Word 文档上传到我们的自定义文档管理系统中。我想添加一个验证来检查密码,如果有密码则拒绝上传。

自动化 Word - 与 COM 互操作 - 是不可能的,因为这是一个服务器端应用程序。

4

3 回答 3

5

我认为这将取决于 Microsoft Word 的版本。旧版本的 Word(2007 年之前)将需要一些 COM 互操作,因为它们不是以开放格式保存的。您无法解决这个问题,我对在 Web 服务器上安装任何 Office 感到沮丧。此外,我认为检测密码保护的唯一方法是尝试打开/取消保护文件并捕获某个异常(您可能还必须进一步评估异常中的错误代码)。不漂亮!

但是,对于以开放 DOCX 格式(标准 ECMA-376)保存的较新版本的 word(2007+),您可以检查 XML 并检查属性设置为“on”的DocumentProtection元素是否存在......w:enforcement

<w:DocumentProtection
   w:edit="read-only"
   w:enforcement="on"
   w:unprotectPassword="1FC6CBEB"/>

注意:这里看到的密码是加密的(很明显);我用密码“test”保存了这个特定的文档。

于 2010-07-01T13:54:37.283 回答
5

不幸的是,它不能直接从 .NET 或DSOFile.dll 获得,但您可以在 .NET 中创建一个包装器来读取任何 Office 文件的PIDSI_DOC_SECURITY属性,以在不打开文档的情况下确定它是否受密码保护。有许多C++ 示例可以移植到iPropertyStorage.

包装的示例在TechTarget上,但包装器似乎不可用。

于 2010-07-01T22:37:42.923 回答
0

您是说您想在不使用任何 Office 互操作的情况下打开/检查 Word 文档吗?祝你好运!

可能您唯一的起点是自己手动解析 docx(规范在此处发布)。但实际上,我建议您硬着头皮使用 Office 互操作库,因为这比您自己解析文档的重量要求要轻得多。没有什么可以从本质上阻止您在服务器应用程序上执行此操作。

于 2010-07-01T13:47:49.440 回答