首页 > 解决方案 > 使用 ZLib 使用 FlateDecode 解码的无限解压缩 PDF 流

问题描述

在发布问题之前,我已经搜索了许多论坛和博客。我在其中找到了样本pythonVB其中正在使用ZLib. 但我无法让它在Delphi.

我有来自 apdf编码的流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;

标签: delphipdfzlib

解决方案


感谢 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;

推荐阅读