使用 zlib C++ 为 PDF 放气和充气
Deflate and inflate for PDF, using zlib C++
我正在尝试实现"zlib.h"放气和膨胀功能来压缩和解压缩PDF文件中的流。输入:来自PDF文件的压缩流。我实现了膨胀函数 - 没关系,我有未压缩的流,之后我尝试使用放气功能再次压缩此流,作为输出我有压缩流,但它不等于输入压缩流,它们不等于长度。我做错了什么?这是我代码的一部分:
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: %lun", (char*)d_zstrm.next_out - deflate_output);
}
没有错。给定的未压缩流没有唯一的压缩流。所需要的只是解压缩准确地返回被压缩的内容(因此是"无损的")。
它可能只是由不同的压缩参数、不同的压缩代码,甚至是同一压缩代码的不同版本引起的。
如果无法重现原始压缩数据,那又如何?重要的是,您可以制作一个有效的PDF文件,该文件可以解压缩并具有所需的内容。
相关文章:
- 为char数组调整zlib-zpipe
- 基于boost的程序的静态链接——zlib问题
- 为什么 zlib 放气初始化调用一次不起作用?
- 安装 zlib 库仍然丢失错误
- 使用 cpprest (Casablanca) 返回 PDF 响应
- ZLib GZIP Returning Z_BUF_ERROR(-5)
- 仅在 zlib c++ 库中强制动态编码
- 如何使用打印到 PDF 打印机在 MFC 和 CView 中以编程方式打印而不提示输入文件名?
- zlib 膨胀在使用小缓冲区时会损坏
- 简单的安卓二进制崩溃与zlib
- zlib 添加的各种类型的目的是什么,我如何使用它们?
- 使用 C++/Qt(已知密码)打开加密的 PDF
- boost zlib filter 在 Windows 中不起作用
- 如何获取字体数据以嵌入到 PDF 中?
- 无法为速推C++库生成 PDF 文档
- 解压缩串联的 zlib 流而不读取下一个字节
- 将 QTableWidget 内容打印为 PDF
- 是否可以从从 QPrintPreviewDialog 调用的 QPrinter 对话框中删除"Write to PDF"?
- 使用 zlib C++ 为 PDF 放气和充气
- 使用zlib从pdf中提取文本