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

在开发一个基于 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 Knp\Snappy\Pdf;
use Wenprise\Facades\View;

// 生成的 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...,经作者同意转载。

相关推荐