Pregunta

estoy usando c # para crear un botón para IE y este botón realiza ciertas acciones que dependen del documento PDF. Estoy tratando de configurar una guarda para evitar que se lleve a cabo ninguna acción si el tipo de documento no es un PDF, pero no estoy seguro de cómo IE entrega el documento a Adobe y el lector se hace cargo. Estoy usando ambos SHDocWv, he mirado los objetos WebBrowserClass y no estoy seguro de cómo resolver esto. ¿Alguna sugerencia?

¿Fue útil?

Solución

Es un poco problemático hacer esto AFAIK.

El valor de la propiedad IWebBrowser2 :: Type depende de qué complemento haya instalado que maneje los archivos PDF, ya que algunos complementos crean un contenedor HTML para el archivo PDF (como Adobe), por lo que obtiene " Documento HTML " como tipo y algunos complementos no hacen esto (como Foxit), por lo que no puedes retransmitir esto exclusivamente.

Por lo tanto, si tiene un contenedor de PDF con HTML, puede usar IHTMLDocument2 :: mimeType para averiguar el tipo exacto del documento (los archivos JPEG / GIF / PNG / etc. están envueltos en HTML por el navegador). Pero, como sé, tampoco es confiable, por ejemplo, en mi máquina devuelve "Documento de Firefox". para documentos HTML porque los archivos .html están asociados con Firefox: s Pero no probé para ver si este es el caso con los PDF alos.

Otra opción es usar la llamada a la API GetUrlCacheEntryInfoEx para obtener el archivo en el caché del navegador local que almacena el documento, luego leerlo (solo el principio del archivo, creo que solo los primeros 256 bytes son importantes) y llame a FindMimeFromData con los datos que acaba de leer y devolverá el tipo mime.

Otros consejos

Verifique el tipo de mimo del documento o vea el archivo window.location.href de webbrowser ... Si se muestra el pdf, podría encontrarlo ...

Otra buena manera es hacer lo siguiente ...

1] Convierta el objeto Document a IPersist y luego extraiga el CLSID usando .GetClassID (..). 2] pInvoke ProgIDFromCLSID para extraer el progId 3] Haga coincidir el progID con aplicaciones / objetos COM conocidos.

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