我刚刚继承了一个生成大型PDF文件的PHP项目,并且经常在几千页和几个服务器内存之后窒息。该项目使用PDFLib在内存中生成这些文件。
我的任务是解决这个问题,所以我做的第一件事就是将PDFLib输出发送到文件而不是在内存中构建。问题是,它似乎仍在构建PDF内存。并且大部分内存似乎永远不会返回到操作系统。最终,整个事情窒息而死。
当我使用大型PDF的片段构建程序时,似乎数据未完全刷新到end_document()上的文件。我没有错误,但PDF不可读,并在十六进制编辑器中打开它使得流明显不完整。
我希望有人遇到过类似的困难。
答案 0 :(得分:2)
解决!需要在每个文本流上调用PDF_delete_textflow(),因为它们具有文档范围,并且在文档关闭之前不会消失,这是因为在该点之前所有可用内存都已耗尽。
答案 1 :(得分:1)
您必须确保关闭每个页面以及关闭文档。这可以通过在每个书面页面的末尾调用“end_page_ext”来完成。
此外,如果您要从另一个PDF导入页面,则必须在每个被压缩的页面后调用“close_pdi_page”,并在完成每个导入的文档时调用“close_pdi_document”。