LoadIFilter () не работает во всех PDF-файлах (но MS filtdump.exe не работает.)

Я пытаюсь написать утилиту C #, которая имитирует поведение filtdump.exe из Windows Search SDK (поскольку filtdump сам по себе не является распространяемым). Я столкнулся с сочетанием противоречивой и / или несуществующей документации и технических проблем, которые я не могу кажется, выследить. Я надеюсь, что кто-то может помочь устранить одно из этих препятствий ...

Согласно MSDN, filtdump использует ILoadFilter :: LoadIFilter для загрузки своего IFilter. Я утверждаю, что MSDN лжет, поскольку он также утверждает, что ILoadFilter :: LoadIFilter существует только в Windows 7, но filtdump отлично работает в более ранних ОС. Монитор процессов показывает, что на самом деле он вызывает LoadIFilter () из query.dll , так что я делаю следующее:

public static class NativeMethods
{
    // From Windows SDK v7.1, NTQuery.h
    [DllImport("query.dll", CharSet = CharSet.Unicode)]
    public static extern int LoadIFilter(
        string pwcsPath,
        [MarshalAs(UnmanagedType.IUnknown)] 
        ref object pUnkOuter,
        ref IFilter ppIUnk);
}

object iUnknown = null;
IFilter filter = null;
var result = NativeMethods.LoadIFilter(args[0], ref iUnknown, ref filter);
if (result != ResultCodes.S_OK)
{
  Console.WriteLine("Failed to load an IFilter for {0}: {1}", args[0], result);
  return;
}

По большей части это приложение и filtdump дают одинаковые результаты - они могут открывать и извлекать текст из текста, документа Word и электронных писем Outlook, и оба не работают с одним и тем же набором других документов, не имеющих IFilter. Однако PDF-файлы вызывают у меня проблему. Filtdump удается открыть и извлечь текст из большинства загруженных мной PDF-файлов, но каждый из PDF-файлов, которые я пробую с помощью моего собственного приложения, дает мне HRESULT 0x80004005, E_FAIL.

Это та же ошибка из этого вопроса , но я получаю ее на каждый PDF, а filtdump нет, поэтому я знаю, что IFilter работает хотя бы по некоторым документам. Кто-нибудь делал подобное раньше с PDF-файлами, чтобы увидеть, что я делаю неправильно?

6
задан Community 23 May 2017 в 12:06
поделиться