2010-03-08 18 views
6

Ich versuche, Text aus PDF-Dateien mit einem iFilter zu extrahieren.Verwendung eines bestimmten PDF IFilter

Der Adobe PDF iFilter, der mit Adobe Reader ausgeliefert wird, ist schrecklich und gibt HRESULT E_FAIL Nachrichten für viele PDF-Dokumente zurück.

Die FoxIt PDF IFilter funktioniert wunderbar auf praktisch alle PDFs, die ich zum Testen verwendet habe.

Das Problem ist, dass es jedes Mal, wenn der Adobe Updater läuft, den tollen FoxIt IFilter durch den schlechten Adobe IFilter ersetzt.

Ich habe die LoadIFilter Methode verwendet, um den registrierten IFilter für PDF-Dateien zu erhalten. Gibt es eine Möglichkeit, die Win32-API zu erzwingen, das FoxIt IFilter statt des Adobe IFilter zu laden?

HINWEIS: Diese Frage über determining which IFilters are installed fragt eine verwandte - aber nicht identische - Frage.

Antwort

3

Der IFilter scheint als ein COM-Objekt mit Windows registriert zu sein, also sollten Sie in der Lage sein, eine Instanz davon mit COM zu erstellen.

Von http://msdn.microsoft.com/en-us/library/ms692565: Die Struktur der DLL ist, dass es ein IFilter und IClassFactory hat

sollten Sie in der Lage sein, die IClassFactory (angesichts der CLSID) aus

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

instanziiert
+0

Dank Nigel, werde ich das versuchen. – dthrasher

0

Neben dem oben genannten können Sie einfach die systemweit verwendete IFilter DLL für den Dateityp, der Sie interessiert, überprüfen.

Wenn Sie die Adobe-DLL anstelle der Foxit-DLL finden, ändern Sie den InprocServer32-Eintrag für den Schlüssel, auf den sich der PersistentHandler Ihres Dateityps bezieht. Je nach verwendetem System benötigen Sie möglicherweise spezielle Rechte. Starten Sie dann die IFilter-Verwendung.

Werfen Sie einen Blick auf die einfach Erklärung, wie die iFilter DLLs ausgewählt sind:

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

Verwandte Themen