Pregunta

Mis usuarios como para cargar documentos de Word protegidos por contraseña en nuestro sistema de gestión de documentos personalizados. Me gustaría añadir una validación para comprobar si la contraseña y rechazar la carga si tiene una contraseña.

Automatización de la Palabra - con interoperabilidad COM -. Está fuera de la cuestión porque se trata de una aplicación del lado del servidor

¿Fue útil?

Solución

Por desgracia no está disponible directamente desde .NET o Dsofile. DLL , pero se puede crear un contenedor de .NET para leer el PIDSI_DOC_SECURITY propiedad de cualquier archivo de Office para averiguar si está protegido con contraseña o no sin necesidad de abrir el documento. Hay una serie de muestras C ++ por ahí que podría ser portado con una definición de iPropertyStorage .

A envuelto ejemplo es en TechTarget , pero el envoltorio parece no estar disponible.

Otros consejos

creo que va a depender de la versión de Microsoft Word. Las versiones anteriores de Word (antes de 2007) requerirán alguna interoperabilidad COM, ya que no se guardan en un formato abierto. Nada de lo que puede hacer para conseguir alrededor de eso, y siento sus frustraciones con instalar nada Office en un servidor web. Además, creo que la única manera de detectar la protección de contraseña en éstos es intentar abrir / desproteger el archivo y coger una cierta excepción (puede que tenga que seguir evaluando un código de error en la excepción también). No es bonita!

Sin embargo, hay nuevas versiones de la palabra (2007+) guardados en el formato DOCX abierto ( estándar ECMA-376 ), se puede examinar el XML y comprobar la existencia del elemento DocumentProtection con el conjunto de atributos w:enforcement en "on" ...

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

Nota: La contraseña se ve aquí es encriptada (obviamente); Me salvó este documento en particular con una contraseña de "prueba".

¿Quiere decir que desea abrir / examinar los documentos de Word sin utilizar ningún interoperabilidad Oficina en absoluto? ¡Buena suerte!

Posiblemente el único lugar para empezar sería analizar manualmente el docx a sí mismo (la especificación se publicó aquí ). Realmente sin embargo, me gustaría sugerir que morder la bala y el uso de las bibliotecas de la Oficina de interoperabilidad, porque eso es un requisito de peso mucho más ligero que analizar el documento mismo. No hay nada que intrínsecamente evita que que hacer eso en una aplicación de servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top