gpt4 book ai didi

c# - LoadIFilter() 在所有 PDF 上都失败(但 MS 的 filtdump.exe 没有。)

转载 作者:太空狗 更新时间:2023-10-29 21:46:43 25 4
gpt4 key购买 nike

我正在尝试编写一个 C# 实用程序来模仿 Windows Search SDK 中 filtdump.exe 的行为(因为 filtdump 本身似乎不可再分发.) 我遇到了相互矛盾和/或不存在的文档以及我似乎无法追踪的技术问题的组合。我希望有人可以帮助消除这些障碍中的一个或另一个...

根据 MSDN,filtdump 使用 ILoadFilter::LoadIFilter加载它的 IFilter。我认为 MSDN 在撒谎,因为它还声称 ILoadFilter::LoadIFilter 仅存在于 Windows 7 上,但 filtdump 在较早的操作系统上运行良好。 Process Monitor 表明它实际上是从 query.dll 调用 LoadIFilter(),所以这就是我正在做的:

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 都给我一个 0x80004005 的 HRESULT,E_FAIL。

这与 this question 中的错误相同但我在每个 PDF 上都得到它,而filtdump 不是,所以我知道IFilter 至少在处理一些文档。以前有没有人用 PDF 做过这种事情,可以看到我做错了什么?

最佳答案

你可能想看看 this blog post .简而言之,Adobe 的 PDF 过滤器 v10 使用允许使用过滤器的应用程序白名单,包括 Microsoft 的诊断工具,如 filtdump.exe,据称是一种“安全措施”。

关于c# - LoadIFilter() 在所有 PDF 上都失败(但 MS 的 filtdump.exe 没有。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7177953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com