Моим пользователям нравится загружать защищенные паролем документы Word в нашу пользовательскую систему управления документами. Я хотел бы добавить проверку, чтобы проверить на пароль и отказаться от загрузки, если это имеет пароль.
Автоматизация Word - со взаимодействующим с COM - вне рассмотрения, потому что это - серверное приложение.
К сожалению, он недоступен напрямую из .NET или DSOFile.dll , но вы можете создать оболочку в .NET для чтения свойства PIDSI_DOC_SECURITY любого файла Office, чтобы узнать, защищен ли он паролем, не открывая документ. Существует ряд примеров C ++ , которые можно перенести с определением iPropertyStorage
.
Пример оболочки находится на TechTarget , но оболочка кажется недоступной.
Думаю, это будет зависеть от версии Microsoft Word. Более старые версии Word (до 2007 г.) потребуют некоторого взаимодействия с COM, поскольку они не сохраняются в открытом формате. Вы ничего не можете сделать, чтобы обойти это, и я чувствую ваше разочарование при установке чего-либо Office на веб-сервере. Кроме того, я считаю, что единственный способ обнаружить защиту паролем на них - это попытаться открыть / снять защиту с файла и перехватить определенное исключение (возможно, вам также придется дополнительно оценить код ошибки в этом исключении). Не очень!
Однако для более новых версий Word (2007+), сохраненных в открытом формате DOCX ( Standard ECMA-376 ), вы можете изучить XML и проверить наличие DocumentProtection
с атрибутом w: принудительное применение
, установленным на «on» ...
<w:DocumentProtection
w:edit="read-only"
w:enforcement="on"
w:unprotectPassword="1FC6CBEB"/>
Примечание: пароль, показанный здесь, зашифрован (очевидно); Я сохранил этот конкретный документ с паролем «test».
Вы хотите сказать, что хотите открывать / изучать документы Word, вообще не используя взаимодействие с Office? Удачи!
Возможно, единственное место для начала - это вручную проанализировать docx (спецификация опубликована здесь ). На самом деле, я бы посоветовал вам укусить пулю и использовать библиотеки взаимодействия Office, потому что это гораздо более легкое требование, чем самостоятельный анализ документа. Нет ничего, что внутренне мешало делать это в серверном приложении.