使用zlib C ++缩小和扩充PDF

我正在尝试实现“zlib.h”deflate和inflate函数来压缩和解压缩PDF文件中的流。 输入:来自PDF文件的压缩流。 我实现了inflate函数 – 没关系,我有未压缩的流,之后我尝试用deflate函数再次压缩这个流,因为输出我有压缩流,但它不等于输入压缩流,它们不等于长度。 我做错了什么? 这是我的代码的一部分:

size_t outsize = (streamend - streamstart) * 10; char* output = new char[outsize]; ZeroMemory(output, outsize); z_stream zstrm; ZeroMemory(&zstrm, sizeof(zstrm)); zstrm.avail_in = streamend - streamstart + 1; zstrm.avail_out = outsize; zstrm.next_in = (Bytef*)(buffer + streamstart);//block of date to infalte zstrm.next_out = (Bytef*)output; int rsti = inflateInit(&zstrm); if (rsti == Z_OK) { int rst2 = inflate(&zstrm, Z_FINISH); if (rst2 >= 0) { cout << output << endl;//inflated data } } char* deflate_output = new char[streamend - streamstart]; ZeroMemory(deflate_output, streamend - streamstart); z_stream d_zstrm; ZeroMemory(&d_zstrm, sizeof(d_zstrm)); d_zstrm.avail_in = (uInt) (strlen(output)+1); d_zstrm.avail_out = (uInt) (streamend - streamstart); d_zstrm.next_in = (Bytef*)(output); d_zstrm.next_out = (Bytef*)(deflate_output); int rsti1 = deflateInit(&d_zstrm, Z_DEFAULT_COMPRESSION); if (rsti1 == Z_OK) { int rst22 = deflate(&d_zstrm, Z_FINISH); out << deflate_output << endl << "**********************" << endl; //I try to write deflated stream to file printf("New size of stream: %lu\n", (char*)d_zstrm.next_out - deflate_output); } 

没有任何错误。 给定的未压缩流没有唯一的压缩流。 所需要的只是减压能够准确地回复压缩的内容(因此“无损”)。

它可能仅由不同的压缩参数,不同的压缩代码或甚至相同压缩代码的不同版本引起。

如果无法重现原始压缩数据,那又如何呢? 重要的是,您可以创建一个可以解压缩并具有所需内容的有效PDF文件。