2010-03-08 13 views
6

Estoy tratando de extraer texto de archivos PDF usando un iFilter.Cómo usar un PDF específico IFilter

El Adobe PDF iFilter que se distribuye con Adobe Reader es horrible, ya que devuelve HRESULT E_FAIL mensajes para muchos documentos PDF.

El FoxIt PDF IFilter funciona muy bien en prácticamente todos los PDF que he estado usando para probar.

El problema es que cada vez que se ejecuta Adobe Updater, reemplaza el impresionante FoxIt IFilter con el asqueroso Adobe IFilter.

He estado usando el método LoadIFilter para obtener el IFilter registrado para archivos PDF. ¿Hay alguna manera de forzar que la API de Win32 cargue FoxIt IFilter en lugar de Adobe IFilter?

NOTA: Esta pregunta acerca de determining which IFilters are installed hace una pregunta relacionada, pero no idéntica.

Respuesta

3

El IFilter parece estar registrado como un objeto COM con Windows, por lo que debería poder crear una instancia del mismo utilizando COM.

De http://msdn.microsoft.com/en-us/library/ms692565: La estructura de la DLL es que tiene un IFilter y una IClassFactory

Usted debe ser capaz de crear una instancia del IClassFactory (dado el CLSID)

la salida http://msdn.microsoft.com/en-us/library/ms684007 http://msdn.microsoft.com/en-us/library/ms680760

+0

Gracias Nigel, voy a dar que un intento. – dthrasher

0

Al lado del camino anterior, puede simplemente verificar el DLL de IFilter utilizado en todo el sistema para el tipo de archivo que le interesa.

Si encuentra la DLL de Adobe en lugar de la DLL de Foxit, cambie la entrada de InprocServer32 para la clave a la que se refiere PersistentHandler de su tipo de archivo. Esto podría necesitar derechos especiales, según el sistema que use. Luego, inicie el uso de IFilter.

Tener un vistazo a la simple explicación de cómo se seleccionan los archivos DLL iFilter:

http://msdn.microsoft.com/en-us/library/ms692488

Cuestiones relacionadas