6

我有带有 TWIG 模板引擎的 Symfony 框架。我正在制作 1000 页的 pdf

<dynamic-page>...content in for-loop...</dynamic-page>`

但是,在使用 写入磁盘时ps_facade,它给了我内存耗尽的致命错误。那么有什么方法可以让我以 5 页为单位创建这个 pdf 文件吗?

经过研究,我发现使用包含 5 页数据的模板然后将其写入文件应该可以。但这样我将无法添加页码,因为页码应该是 1-1000。我的页脚代码如下所示,

<placeholders>
    <footer>
        <div height="30px" width="100%">
        <hr/>
        <div float="left">Blah Blah</div>
        <div float="left" margin-left="350px"><page-info format="Page %s of %s"></div>
        </div>
    </footer>
</placeholders>
4

1 回答 1

2

对于这样的长进程,您应该使用消息传递系统。RabbitMQ 可以完成这项工作。

  1. 您的用户请求 pdf
  2. 您立即告诉他,他的请求已被考虑,并且在工作完成后他会收到一封电子邮件,或者他可以稍后再回来
  3. 消费者看到工作,并启动 pdf 生成(不必在 php 中)。

优点:由于该进程不是由 php 的 web 版本运行,它没有 memory_limit 和 max_execution 时间限制如果作业已经在运行,您可以告诉您的用户,而不是为同一个 pdf 启动另一代。而且由于人们在不耐烦时经常刷新页面,这对于您的服务器来说确实是一个巨大的 Pro(更少的 CPU 使用率)。

缺点:你必须设置一个消息服务器并学习一些东西。但这真的是骗局吗?

于 2012-10-13T10:44:25.890 回答