我们希望将大量PDF文件合并为一个大文件并将其发送给客户端。但是,我们的生产服务器上的资源非常有限,因此首先合并内存中的所有文件,然后发送完成的PDF文件会导致我们的脚本被占用,因为它耗尽了可用内存。
唯一的解决方案(除了获得更好的服务器,显然)将在完全创建之前开始流式传输PDF文件以绕过内存限制。
但是我想知道这是否可能。 PDF文件可以在完全创建之前进行流式处理吗?或者PDF文件格式是否允许流式传输未完成的文件,因为在完整内容确定后必须设置一些标题或其他内容?
如果可能,哪个PDF库支持将文件创建为流?我所知道的大多数库(如TCPDF)似乎在内存中创建了完整的文件,然后在某处输出了这个完成的结果(即通过$tcpdf->Output()
方法)。
答案 0 :(得分:0)
PDF文件格式完全可以流式传输。当然,无论如何都不会阻止它。
例如,我们最近有一位客户需要通过HTTP连接读取单页到远程PDF,而无需下载或阅读整个PDF。我们可以通过为PDF中的特定内容发出许多小型HTTP请求来实现此目的。我们使用PDF末尾的预告片和交叉引用表来查找所需内容,而无需解析整个PDF。
如果我了解您的问题,在您创建或流出合并文档之前,您使用的当前库看起来像是在内存中加载每个PDF。
如果我们以不同的方式看待这个问题,那么更好的解决方案是PDF库只能引用要合并的PDF,然后在创建或流式传输合并的PDF时,提取内容和资源来自要合并的PDF,以及何时需要。
我不确定有多少PHP库可以做到这一点,因为我不太了解PHP,但我知道可能有一些C / C ++库可能能做到这一点。我知道PHP可以使用扩展来调用这些库。唯一的缺点是他们可能拥有商业许可证。
免责声明:我为Mako SDK R& D小组工作,因此我肯定知道有一些库可以做到这一点。 :)