Как использовать конкретный PDF IFilter - PullRequest
6 голосов
/ 08 марта 2010

Я пытаюсь извлечь текст из файлов PDF с помощью iFilter.

iFilter Adobe PDF, который распространяется с Adobe Reader, ужасен, возвращая сообщения HRESULT E_FAIL для многих документов PDF.

FoxIt PDF IFilter прекрасно работает практически на всех PDF-файлах, которые я использовал для тестирования.

Проблема в том, что при каждом запуске Adobe Updater он заменяет удивительный FoxIt IFilter на хреновый Adobe IFilter.

Я использовал метод LoadIFilter , чтобы получить зарегистрированный IFilter для файлов PDF. Есть ли способ заставить Win32 API загружать FoxIt IFilter вместо Adobe IFilter?

ПРИМЕЧАНИЕ: Этот вопрос о определении того, какие фильтры IFIL установлены задает связанный, но не идентичный, вопрос.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

Кажется, что IFilter зарегистрирован как COM-объект с окнами, поэтому вы можете просто создать его экземпляр с помощью 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

0 голосов
/ 05 апреля 2012

Кроме того, вы можете просто проверить общесистемную используемую библиотеку IFilter DLL для интересующего вас типа файла.

Если вы найдете Adobe DLL вместо Foxit DLL, измените запись InprocServer32 для ключа, на который ссылается PersistentHandler вашего типа файла. Это может потребовать специальных прав, в зависимости от системы, которую вы используете. Затем начните использование IFilter.

Взгляните на простое объяснение того, как выбираются библиотеки IFIlter:

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

...