动态创建PDF并通过电子邮件发送

时间:2012-10-02 23:05:25

标签: php pdf-generation email-attachments

我有一个注册列表,我需要向列表中的每个人发送PDF。每封电子邮件都需要包含一个PDF,它在服务器上有一个基本版本,但每个人都需要通过名称/公司等在顶部进行个性化。这需要通过电子邮件发送给每个人,目前这一数字总计为2,500,但未来可能会更高。

我刚刚开始研究这个项目,但是自上周以来我遇到的问题是服务器似乎无法处理这个问题。目前该脚本正在使用Zend,然后Zend允许它使用Zend_Pdf和Zend_Mail来创建PDF和发送电子邮件。 Zend_mail从smtp.com连接到smtp服务器以进行实际的电子邮件发送。

由于我们在服务器上运行了很多站点,因此我们无法负担得起它,当我分批运行时,它可能会开始下降。到目前为止,我所拥有的最佳解决方案是从我的本地机器运行curl到脚本,然后执行一个人。然后curl脚本再次调用它,一遍又一遍地批量调用。即使这有时也会遇到问题,而且似乎有些人甚至在应该完成之后仍然记忆(我真的不确定如何)。

所以我正在寻找的是有关这样做的信息,包括库,代码,服务器设置信息,任何可以减轻痛苦,运行速度更快的任何事情。我的想法已经用完了,这是我以前不必做的事情(特别是在批量级别)。

谢谢。

编辑:

我也忘了提到它正在使用zend_barcode :: factory在PDF上创建条形码。

4 个答案:

答案 0 :(得分:1)

我建议的第一步是找出问题所在,如果可以的话。它是PDF生成?是电子邮件吗? "服务器似乎无法处理这个"并没有说出什么实际上失败了,因为"服务器发生故障" - 您需要确定是否内存/磁盘空间/时间不足或其他内容。这将帮助您确定是否需要对您的一代进行调整或采用新方法。因为你说即使是单个手动调用也会失败,你应该能够将问题缩小到究竟是什么原因导致失败。

如果您在某个资源限制附近运行(可能是多个站点正在运行的情况),您可能需要将此功能卸载到另一台计算机上。您的选择包括:

  1. 在新主机上运行相同的设置并调整您的应用程序以使用新系统
  2. 在新主机上运行新设置
  3. 使用外部系统(例如上述PDFCrowd或Docmosis
  4. 从问题的具体细节开始。我希望有所帮助。请注意我为创建Docmosis的公司工作。

答案 1 :(得分:0)

根据我的经验 - 有两个选择:

使用一个或多个PDF库动态生成PDF(可能非常慢)。

使用像wkhtmltopdf这样的简单shell实用程序,使用webkit渲染引擎将qtml转换为pdf,并使用qt。

基本上,您可以遍历 n HTML页面并生成PDF,而无需纯动态PDF生成的开销!

我们已经使用它来每天分发数千个个性化PDF,因为它可以快速将HTML页面转换为PDF。存在依赖关系,但它比单独“创建”PDF更有效(计算)。

希望这有帮助。

答案 2 :(得分:0)

以下是一些想法:

  1. 这是否必须在Web服务器上运行?为什么不运行框架 从不同的机器,但具有相同的设置?您可能需要创建一个不同的 控制器处理命令行版本的请求,但没有根本 是因为它无法运作。
  2. 如果以编程方式创建PDF会让您头疼,您可以使用服务 在过去,我使用了PDFCrowd并取得了良好的效果,他们提供了这些结果 一个有用的PHP库。您可以使用任何样式表的完整URL为他们提供一小段HTML 和图像,他们将为您创建PDF。

    每份文件的费用从每份文件0.5-4.5美分不等,具体取决于您的费率计划。

    还有其他服务可以做同样的事情。

  3. 如果这种批量工作对贵公司来说很重要,你可以考虑一下 异步作业队列,如beanstalk。你可以排队 成千上万的这些,工作脚本可以以任何速度处理请求 认为合理。

答案 3 :(得分:0)

如果您尝试通过HTTP调用脚本,脚本将根据php.ini中指定的max_execution_time超时。

您需要编写一个可以从命令行运行的php脚本,然后通过cron作业安排它。该脚本一次可以读取一个用户,将他的pdf文件放在一起,并通过电子邮件发送给他。之后,您可能必须运行一些性能检查以查看服务器是否可以处理该过程。