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

时间:2014-09-11 23:34:36

标签: c# pdf windows-phone-8

我发布了一个与此a while back相关的问题,但没有得到任何回复。从那时起,我发现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^+

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

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

2 个答案:

答案 0 :(得分:2)

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());
}

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

C# decode (decompress) Deflate data of PDF File

答案 1 :(得分:1)

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

如果这不起作用,那么有一些库(如DotNetZip)能够缩减流解压缩。请检查this link以进行效果比较。

我看到的最后一个可能的选项,是在不重新发明轮子的情况下使用其他PDF解析库并将它们用于流解压缩,甚至用于整个PDF处理。