Как использовать определенный фильтр PDF IFilter
Я пытаюсь извлечь текст из PDF-файлов с помощью фильтра.
Adobe PDF iFilter, который распространяется с Adobe Reader, ужасен, возвращая HRESULT E_FAIL
сообщения для многих PDF-документов.
на программа Foxit PDF файл фильтра прекрасно работает практически на всех PDF-файлах, которые я использовал для тестирования.
проблема в том, что каждый раз, когда Adobe Updater работает, он заменяет удивительный FoxIt IFilter на дерьмовый Adobe IFilter.
Я использую LoadIFilter метод, чтобы получить зарегистрированный IFilter для PDF-файлов. Есть ли способ заставить Win32 API загрузить FoxIt IFilter вместо Adobe IFilter?
Примечание: этот вопрос о определение, какие IFilters установлены задает связанный , но не идентичный вопрос.
2 ответов
фильтр IFilter, похоже, зарегистрирован как COM-объект с windows, поэтому вы можете просто создать его экземпляр с помощью COM.
от http://msdn.microsoft.com/en-us/library/ms692565: структура DLL заключается в том, что она имеет фильтр IFilter и IClassFactory
вы должны иметь возможность создать экземпляр IClassFactory (учитывая CLSID)
проверить http://msdn.microsoft.com/en-us/library/ms684007 http://msdn.microsoft.com/en-us/library/ms680760
кроме пути выше, вы можете просто проверить общесистемную используемую библиотеку DLL IFilter для интересующего вас типа файла.
Если вы нашли Adobe DLL вместо Foxit DLL, измените запись InprocServer32 для ключа, на который ссылается PersistentHandler вашего типа файла. Для этого могут потребоваться специальные права, в зависимости от используемой системы. Затем начала использования фильтра.
посмотрите на простое объяснение того, как библиотеки Ifilter выбрано: