在開發一個基於 WordPress 的 CRM 系統的時候,有一個需求是根據用戶提供的信息,生成一個 PDF 文件,並經過電子郵件發送給客戶。沒有作過的朋友可能會認爲這是一個比較麻煩的需求,其實咱們把這個需求拆分開來作,就很簡單了,首先,獲取用戶信息,而後使用用戶信息生成 PDF 文件,最後再把生成的 PDF 文件經過 Email 發送給客戶就能夠了 。html
knp-snappy 是一個能夠幫助咱們從 URL 或 HTML 文件生成 PDF 的 PHP 庫,該庫依賴 wkhtmltopdf,若是操做系統中沒有安裝,按照前面網址中的說明安裝便可。安裝後,咱們經過 Composer 安裝,而後再包含 Composer 生成的自動加載文件到主題或插件中。安全
composer require knplabs/knp-snappy
首先,咱們須要指定生成的 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 使用文檔。app
若是發現 PDF 中顯示不了中文或者中文是亂碼的,多是服務器操做系統中沒有中文字體,從 Windows 中複製 simsun.ttf 或者中文字體到 /usr/share/fonts 目錄中便可。
經過電子郵件發送生成的 PDF 文件
生成後的文件保存在咱們在代碼中指定的位置。生成 PDF 文件後,使用 WordPress 內置的 wp_mail 函數發送便可。獲取用戶電子郵件、設置郵件標題、內容的方法很簡單,WordPress 官方也有介紹,這裏就很少說了。composer
wp_mail($to, $subject, $message, $headers, [$file]);
爲了防止 PDF 文件泄漏,咱們須要採起一些安全措施,好比隨機生成 PDF 文件名,經過 Ngnix 設置,禁止用戶下載 PDF 文件,或者郵件發送後,直接刪除 PDF 文件等等。框架
本文始發於:https://www.wpzhiku.com/wordp...,經做者贊成轉載。wordpress