我正在使用embarcadero 10.3.1 c ++,并使用zlib inflate。此代码有效,但是对十六进制形式的文本进行了编码。在下面的代码之后,您会发现问题pdf版本。 1.7
size_t outsize = (streamend - streamstart) * 10;
char *zoutput = new char[outsize];
memset(zoutput,0,outsize);
z_stream zstrm;
zstrm.zalloc = Z_NULL;
zstrm.zfree = Z_NULL;
zstrm.opaque = Z_NULL;
zstrm.avail_in = (unsigned int)(streamend - streamstart + 1);
zstrm.avail_out = (unsigned int)outsize;
zstrm.next_in = (Byte *)(streamstart);
zstrm.next_out = (Byte *)zoutput;
int rsti = inflateInit(zstrm);
if (rsti == Z_OK) {
int rst2 = inflate(zstrm, Z_FINISH);
inflateEnd(zstrm);
if (rst2 >= 0) {
size_t totout = zstrm.total_out;
}
}
==inflated version using zlib===========================================
此pdf信息包含敏感的个人数据,下面的输出是从编码流生成的,下面的输出是pdf解码可读流。问题是,zlib库没有解码文本或浮点值,如Tm \ n Tj \ n之类的行。 E689A388849981A68193A261D489A283内的内容不会被解码。 Tm和Tj是pdf引擎将移动一个点(Tm)的指令,Tj开始显示以编码的文本。
pdf是多级编码文件吗?或者是什么使zlib解码或解压缩十六进制字符串。我尝试了ASCII85和HEXtoASCII。我将继续阅读Adobe规范。
我将此代码放在顶部代码的前面,以隔离 char bac [] =“”;
streamstart = bac;
streamend = bac+(strlen(bac)*sizeof(char));
该行具有一个事务数据,例如在back语句中找到的数据,或名称和地址。我找不到<>的编码策略,例如<~~> => ASCII85。
块流具有数据类型为Flatecode的过滤器。
23 0对象
<>流
============下面从zlib inflate输出。========================
> Blockquote
=========right above===============================
<C1C3C3D6E4D5E3> this I can not get converted to text.