zlib将使流膨胀,但以<>编码的文本将保持十六进制形式

时间:2019-04-16 17:27:04

标签: c++ pdf encode zlib inflate

我正在使用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.

0 个答案:

没有答案