C#如何使用ZIP解压PDF的Stream

zgke 2009-04-04 05:49:54
测试了下.NET下的GZIPStream好象不行。。。谁能解决送2000分吧:)
...全文
860 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
俊炎 2012-01-07
  • 打赏
  • 举报
回复
我想用c++解压stream ??? endstream endobj中间的东西,有哪位兄弟姐妹做过的加我QQ465461081,万分感谢!!
微wx笑 2010-08-28
  • 打赏
  • 举报
回复
这问题还有人关注吗?
1430 0 obj<</Length 3342/Filter/FlateDecode>>stream ??? endstream endobj

/Filter/FlateDecode 说明是使用FlateDecode

FlateDecode yes (PDF 1.2) Decompresses data encoded using the zlib/deflate compression
method, reproducing the original text or binary data.

如何判断应使用zlib还是deflate来解压缩呢?
aron3zx 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 bobob 的回复:]
或许是你使用有问题
stream之间的数据是二进制,打开文件读取的时候一定要以二进制方式打开,你看看是不是这个问题
[/Quote]
已经是提取出stream之间的2进制数据的了,放到6楼的几个函数里面用,第3个函数是会报错的,感觉上就是这种解压方式不对..
6楼的几个函数我改了一下才能用..

private byte[] CompressFile(FileStream fs) //加压
{
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
MemoryStream ms = new MemoryStream();

GZipStream gZipStream = new GZipStream(ms, CompressionMode.Compress);

gZipStream.Write(buffer, 0, buffer.Length);

gZipStream.Close();
ms.Flush();
byte[] data = ms.ToArray();
ms.Close();
return data;
}

private void DecompressFile(byte[] stream, string file) //解压
{
MemoryStream ms = new MemoryStream(stream);
GZipStream gzipStream = new GZipStream(ms, CompressionMode.Decompress);
FileStream fs = null;
try
{
gzipStream = new GZipStream(ms, CompressionMode.Decompress);
fs = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.Write);
int length = ReadAllBytesFromStream(gzipStream, fs);

fs.Flush();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
ms.Close();
fs.Close();
gzipStream.Close();
}
}

private static int ReadAllBytesFromStream(Stream stream, FileStream fs) //流 to 文件
{
int offset = 0;
int totalCount = 0;
int size = 100; //10759
byte[] buffer = new byte[1928 + size];//要解压的流的长度+size //1928
while (true)
{
int bytesRead = stream.Read(buffer, offset, size);
if (bytesRead == 0)
{
break;
}
fs.Write(buffer, offset, bytesRead);
offset += bytesRead;
totalCount += bytesRead;
}
return totalCount;
}
zgke 2009-04-09
  • 打赏
  • 举报
回复
继续顶下...谁有简单的对ZIP操作STREAM 的例子
sxmonsy 2009-04-08
  • 打赏
  • 举报
回复
好多分呀好多分.
bobob 2009-04-08
  • 打赏
  • 举报
回复
或许是你使用有问题
stream之间的数据是二进制,打开文件读取的时候一定要以二进制方式打开,你看看是不是这个问题
悔说话的哑巴 2009-04-08
  • 打赏
  • 举报
回复
这个实在是有难度 帮顶
zgke 2009-04-08
  • 打赏
  • 举报
回复
就是啊 zip .NET用什么解压呢...GZIP是不行了
zgke 2009-04-07
  • 打赏
  • 举报
回复
继续顶...谁能告诉我 PDF 里的 STREAM 到底是怎么压缩的..或则怎么还原的...网络上有人说是LZW ..到底是什么啊
genius_tong 2009-04-07
  • 打赏
  • 举报
回复
强悍~学习
whitechololate 2009-04-07
  • 打赏
  • 举报
回复
学习,强帖留名
jie3614 2009-04-07
  • 打赏
  • 举报
回复
学习一下
zzxap 2009-04-07
  • 打赏
  • 举报
回复
某人也遇到过这种问题,说是数据不正确造成的
冷月孤峰 2009-04-07
  • 打赏
  • 举报
回复
以前用.net生成PDF时是用的iTextSharp来实现的,不晓得是否能用iTextSharp反向来实现楼主的要求,晚上回去试试看。
zgke 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wf5360308 的回复:]
引用 10 楼 zgke 的回复:
晕啊...不是 你用文本打开PDF文件 里面的stream开始和endobject结束..我不知道怎么解这个... 想找个方法解开.

这个要求没做过,楼主是不是想将PDF内的内容给截取出来啊?
这个不晓得是否有用:
http://zlping.javaeye.com/blog/308461
[/Quote]

非常感谢...内说里面的stream是什么压缩的:(
js1722 2009-04-07
  • 打赏
  • 举报
回复
mark..
冷月孤峰 2009-04-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zgke 的回复:]
晕啊...不是 你用文本打开PDF文件 里面的stream开始和endobject结束..我不知道怎么解这个... 想找个方法解开.
[/Quote]
这个要求没做过,楼主是不是想将PDF内的内容给截取出来啊?
这个不晓得是否有用:
http://zlping.javaeye.com/blog/308461
深海之蓝 2009-04-07
  • 打赏
  • 举报
回复
2000分啊。。。
pennymay 2009-04-07
  • 打赏
  • 举报
回复
不懂只能帮顶, 顺便学习~!~
mykelly6 2009-04-07
  • 打赏
  • 举报
回复
瞻仰下,呵呵
加载更多回复(19)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧