delphi - 使用 ZLib 使用 FlateDecode 解码的无限解压缩 PDF 流
问题描述
在发布问题之前,我已经搜索了许多论坛和博客。我在其中找到了样本python
,VB
其中正在使用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;
解决方案
感谢 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;
推荐阅读
- lisp - 在 LISP (Racket) 中定义一棵树
- loops - 重新启动 AS3 循环的最佳方法是什么?
- javascript - 两种模式都在点击时触发
- java - java中的高阶函数,如何编写一个不带参数的方法并返回一个Map,其中Map的值是java中的一个方法
- android - Flutter - Activity Tracker App - 步数、楼上/楼下、静止
- javascript - 角度基于权限的路由
- reactjs - 如何在 React 中获取 API 响应?
- json - 找不到名称“JSON”打字稿文件
- bash - 如何删除字符串中的 \r\n 并将字符串转换为数组
- node.js - 没有互联网访问时,纱线运行节点非常慢