资讯专栏INFORMATION COLUMN

在 WordPress 主题中使用 knp-snappy 生成 PDF 文件并发送给客户

AlanKeene / 3688人阅读

摘要:在开发一个基于的系统的时候,有一个需求是根据用户提供的信息,生成一个文件,并通过电子邮件发送给客户。有了这两个信息,调用的对应方法就可以生成文件。生成文件后,使用内置的函数发送即可。本文始发于,经作者同意转载。

在开发一个基于 WordPress 的 CRM 系统的时候,有一个需求是根据用户提供的信息,生成一个 PDF 文件,并通过电子邮件发送给客户。没有做过的朋友可能会认为这是一个比较麻烦的需求,其实我们把这个需求拆分开来做,就很简单了,首先,获取用户信息,然后使用用户信息生成 PDF 文件,最后再把生成的 PDF 文件通过 Email 发送给客户就可以了 。

knp-snappy 是一个可以帮助我们从 URL 或 HTML 文件生成 PDF 的 PHP 库,该库依赖 wkhtmltopdf,如果操作系统中没有安装,按照前面网址中的说明安装即可。安装后,我们通过 Composer 安装,然后再包含 Composer 生成的自动加载文件到主题或插件中。

composer require knplabs/knp-snappy
使用 knp-snappy 生成 PDF 文件

首先,我们需要指定生成的 PDF 文件保存的位置,然后指定用来生成 URL 文件的 HTML 文件或字符串。有了这两个信息,调用 knp-snappy 的对应方法就可以生成 PDF 文件。

use KnpSnappyPdf;
use WenpriseFacadesView;

// 生成的 PDF 文件
$file = WP_CONTENT_DIR . "/pdf/register-" . $client->ID . ".pdf";

// 如果文件已存在,删除文件,重新生成
if (file_exists($file)) {
    unlink($file);
}

// 用来生成 PDF 文件的 HTML 文件
$html = View::make($view)->with($data);

// 开始使用 knp-snappy 生成 PDF 文件
$snappy = new Pdf("/usr/local/bin/wkhtmltopdf");
try {
    $snappy->generateFromHtml($html, $file);
} catch (Exception $e) {

}

上面代码中的 View 类是我们的 MVC 框架中的方法,你可以使用自己的函数替换,或者可以直接从 URL 中生成 PDF,具体使用方法请参考 knp-snappy 使用文档。

如果发现 PDF 中显示不了中文或者中文是乱码的,可能是服务器操作系统中没有中文字体,从 Windows 中复制 simsun.ttf 或者中文字体到 /usr/share/fonts 目录中即可。
通过电子邮件发送生成的 PDF 文件
生成后的文件保存在我们在代码中指定的位置。生成 PDF 文件后,使用 WordPress 内置的 wp_mail 函数发送即可。获取用户电子邮件、设置邮件标题、内容的方法很简单,WordPress 官方也有介绍,这里就不多说了。

wp_mail($to, $subject, $message, $headers, [$file]);
请注意文件安全

为了防止 PDF 文件泄漏,我们需要采取一些安全措施,比如随机生成 PDF 文件名,通过 Ngnix 设置,禁止用户下载 PDF 文件,或者邮件发送后,直接删除 PDF 文件等等。

本文始发于:https://www.wpzhiku.com/wordp...,经作者同意转载。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31332.html

相关文章

  • 送给大家一本免费的 WordPress 电子书

    摘要:在两年前的年底,我在上上线了我自己的达人课,如今,已经过去了当初约定的销售时间,我决定将这个达人课开放给大家来看,让更多的人掌握的开发能力。内容持续更新这个电子书的内容我后续还会继续更新。我自己仍然在使用,相关的一些实践也会分享到电子书里。 在两年前的 2017 年底,我在 GitChat 上上线了我自己的 WordPress 达人课,如今,已经过去了当初约定的销售时间,我决定将这个达...

    dantezhao 评论0 收藏0
  • Node.js运行原理、高并发性能测试对比及生态圈汇总

    摘要:模式,单实例多进程,常用于多语言混编,比如等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...

    kamushin233 评论0 收藏0
  • Node.js运行原理、高并发性能测试对比及生态圈汇总

    摘要:模式,单实例多进程,常用于多语言混编,比如等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...

    BDEEFE 评论0 收藏0
  • Node.js运行原理、高并发性能测试对比及生态圈汇总

    摘要:模式,单实例多进程,常用于多语言混编,比如等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。就是我们需要一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...

    TesterHome 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<