是否有一种简单的方法可以手动解码 FlateDecode 过滤器以提取 PDF 中的文本?C#

gre*_*tea 6 c# pdf windows-phone-8

我张贴了与此相关的一个问题而回,但没有得到回应。从那以后,我发现 PDF 是使用 FlateDecode 编码的,我想知道是否有办法在 C#(Windows Phone 8)中手动解码 PDF?我得到如下输出:

%PDF-1.5
%????
1 0 obj
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
5 0 obj
<<
/Filter /FlateDecode
/Length 9
>>
stream x^+
Run Code Online (Sandbox Code Playgroud)

PDF 是使用 Windows Phone 8 的 SyncFusion PDF 控件创建的。不幸的是,它们目前没有文本提取功能,我也无法在其他 WP PDF 控件中找到该功能。

基本上,我想要的只是从 OneDrive 下载 PDF 并阅读 PDF 内容。好奇这是否容易实现?

Pet*_*ete 5

private static string decompress(byte[] input)
{
    byte[] cutinput = new byte[input.Length - 2];
    Array.Copy(input, 2, cutinput, 0, cutinput.Length);

    var stream = new MemoryStream();

    using (var compressStream = new MemoryStream(cutinput))
    using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress))
        decompressor.CopyTo(stream);

    return Encoding.Default.GetString(stream.ToArray());
}
Run Code Online (Sandbox Code Playgroud)

根据下面的类似问题,必须从流中剪切流的前 2 个字节。这是在上面的函数中完成的。只需将流的所有字节传递给输入。确保字节数与指定的长度相同。

C# 解码(解压)PDF 文件的压缩数据


小智 1

最简单的解决方案是使用.NET框架提供的DeflateStream 。示例可以在类似线程中找到。这种方法可能存在一些缺陷

如果这不起作用,可以使用一些库(例如DotNetZip),能够进行 deflate 流解压缩。请检查此链接以进行性能比较。

我看到的最后一个可能的选择是使用其他 PDF 解析库,并将其用于流解压缩,甚至用于整个 PDF 处理,而无需重新发明轮子。