В ASP.NET, как я могу определить пароль в файле Word 2003 или 2007? - PullRequest
6 голосов
/ 15 апреля 2010

Моим пользователям нравится загружать защищенные паролем документы Word в нашу пользовательскую систему управления документами. Я хотел бы добавить проверку для проверки пароля и отказаться от загрузки, если у него есть пароль.

Об автоматизации Word - с помощью COM-взаимодействия - не может быть и речи, поскольку это приложение на стороне сервера.

Ответы [ 3 ]

5 голосов
/ 01 июля 2010

Я думаю, что это будет зависеть от версии Microsoft Word.Более старые версии Word (до 2007 года) потребуют некоторого взаимодействия COM, поскольку они не сохраняются в открытом формате.Вы ничего не можете сделать, чтобы обойти это, и я чувствую ваше разочарование по поводу установки чего-либо Office на веб-сервере.Кроме того, я считаю, что единственный способ обнаружить защиту паролем для них - попытаться открыть / снять защиту с файла и перехватить определенное исключение (возможно, вам придется дополнительно оценить код ошибки в этом исключении).Не красиво!

Однако для более новых версий слова (2007+), сохраненных в открытом формате DOCX ( Стандарт ECMA-376 ), вы можете проверить XML и проверить наличиеэлемент DocumentProtection с атрибутом w:enforcement, установленным на "on" ...

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

Примечание. Видимый здесь пароль зашифрован (очевидно);Я сохранил этот конкретный документ с паролем «test».

5 голосов
/ 02 июля 2010

К сожалению, он недоступен напрямую из .NET или DSOFile.dll , но вы можете создать оболочку в .NET для чтения свойства PIDSI_DOC_SECURITY любого файла Office, чтобы выяснить, он защищен паролем или нет без открытия документа. Существует ряд C ++ примеров , которые можно перенести с определением iPropertyStorage.

.

Обернутый пример находится на TechTarget , но оболочка кажется недоступной.

0 голосов
/ 01 июля 2010

Вы говорите, что хотели бы открывать / просматривать документы Word, не используя вообще никакого взаимодействия с Office? Удачи!

Возможно, единственное место, с которого вы могли бы начать, это самостоятельно проанализировать документацию (спецификация опубликована здесь ) На самом деле, я бы посоветовал вам прикусить пулю и использовать библиотеки взаимодействия Office, потому что это гораздо более легкое требование, чем сам анализ документа. Нет ничего, что по сути мешает делать это в серверном приложении.

...