动态创建PDF文件并在尚未完成时将其流式传输?

时间:2017-11-11 17:03:08

标签: php pdf stream

我们希望将大量PDF文件合并为一个大文件并将其发送给客户端。但是,我们的生产服务器上的资源非常有限,因此首先合并内存中的所有文件,然后发送完成的PDF文件会导致我们的脚本被占用,因为它耗尽了可用内存。

唯一的解决方案(除了获得更好的服务器,显然)将在完全创建之前开始流式传输PDF文件以绕过内存限制。

但是我想知道这是否可能。 PDF文件可以在完全创建之前进行流式处理吗?或者PDF文件格式是否允许流式传输未完成的文件,因为在完整内容确定后必须设置一些标题或其他内容?

如果可能,哪个PDF库支持将文件创建为流?我所知道的大多数库(如TCPDF)似乎在内存中创建了完整的文件,然后在某处输出了这个完成的结果(即通过$tcpdf->Output()方法)。

1 个答案:

答案 0 :(得分:0)

PDF文件格式完全可以流式传输。当然,无论如何都不会阻止它。

例如,我们最近有一位客户需要通过HTTP连接读取单页到远程PDF,而无需下载或阅读整个PDF。我们可以通过为PDF中的特定内容发出许多小型HTTP请求来实现此目的。我们使用PDF末尾的预告片和交叉引用表来查找所需内容,而无需解析整个PDF。

如果我了解您的问题,在您创建或流出合并文档之前,您使用的当前库看起来像是在内存中加载每个PDF。

如果我们以不同的方式看待这个问题,那么更好的解决方案是PDF库只能引用要合并的PDF,然后在创建或流式传输合并的PDF时,提取内容和资源来自要合并的PDF,以及何时需要。

我不确定有多少PHP库可以做到这一点,因为我不太了解PHP,但我知道可能有一些C / C ++库可能能做到这一点。我知道PHP可以使用扩展来调用这些库。唯一的缺点是他们可能拥有商业许可证。

免责声明:我为Mako SDK R& D小组工作,因此我肯定知道有一些库可以做到这一点。 :)