使用ZLib用FlateDecode解码的无限解压缩PDF流

在发布问题之前,我已经搜索了许多论坛和博客。 我在pythonVB中找到了使用ZLib的示例。 但我无法在Delphi中使用它。

我有一个来自pdf的流,并用flateDecode进行了编码。

这是将流另存为名为"compressed_stream.pdf"的简单文件(实际上它不是pdf-只是流,但我只是保留了.pdf文件扩展名) https://files.fm/u/epka2hxz

这是我的代码: 执行执行到System.Zlib.ZDecompressStream(streamIn,streamOut);并进入睡眠状态,没有错误,没有崩溃,也没什么-进入睡眠状态直到我中断执行。

有什么主意吗?

var
  fs: TFileStream;
  streamIn,streamOut: TMemoryStream;
begin
  fs := TFileStream.Create(sDocumentFolder + 'compressed_stream.pdf',fmOpenRead);

  streamIn := TMemoryStream.Create();
  streamOut := TMemoryStream.Create();

  streamIn.CopyFrom(fs,0);

  streamIn.Position := 0;
  System.Zlib.ZDecompressStream(streamIn,streamOut);

end;
wk379779001 回答:使用ZLib用FlateDecode解码的无限解压缩PDF流

多亏了Dima,我迅速找到了TZDecomoressionStream的示例: https://forum.lazarus.freepascal.org/index.php?topic=33009.0

function ZDecompressString(aText: string): string;
var
  strInput,strOutput: TStringStream;
  Unzipper: TZDecompressionStream;
begin
  Result:= '';
  strInput:= TStringStream.Create(aText);
  strOutput:= TStringStream.Create;
  try
    Unzipper:= TZDecompressionStream.Create(strInput);
    try
      strOutput.CopyFrom(Unzipper,Unzipper.Size);
    finally
      Unzipper.Free;
    end;
    Result:= strOutput.DataString;
  finally
    strInput.Free;
    strOutput.Free;
  end;
end;
本文链接:https://www.f2er.com/3013709.html

大家都在问