有没有一种简单的方法可以手动解码FlateCodeFilter以提取PDF中的文本?C#

本文关键字:提取 FlateCodeFilter 解码 PDF 文本 一种 简单 有没有 方法 | 更新日期: 2023-09-27 18:21:39

我不久前发布了一个与此相关的问题,但没有得到任何回复。从那以后,我发现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控件创建的。不幸的是,他们目前没有文本提取功能,我在其他WPPDF控件中也找不到该功能。

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

有没有一种简单的方法可以手动解码FlateCodeFilter以提取PDF中的文本?C#

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个字节必须从流中截取。这是在上面的函数中完成的。只需将流的所有字节传递给输入即可。请确保字节数与指定的长度相同。

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

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

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

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