摘要:在開發一個基于的系統的時候,有一個需求是根據用戶提供的信息,生成一個文件,并通過電子郵件發送給客戶。有了這兩個信息,調用的對應方法就可以生成文件。生成文件后,使用內置的函數發送即可。本文始發于,經作者同意轉載。
在開發一個基于 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...,經作者同意轉載。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31332.html
摘要:在兩年前的年底,我在上上線了我自己的達人課,如今,已經過去了當初約定的銷售時間,我決定將這個達人課開放給大家來看,讓更多的人掌握的開發能力。內容持續更新這個電子書的內容我后續還會繼續更新。我自己仍然在使用,相關的一些實踐也會分享到電子書里。 在兩年前的 2017 年底,我在 GitChat 上上線了我自己的 WordPress 達人課,如今,已經過去了當初約定的銷售時間,我決定將這個達...
摘要:模式,單實例多進程,常用于多語言混編,比如等,不支持端口復用,需要自己做應用的端口分配和負載均衡的子進程業務代碼。就是我們需要一個調度者,保證所有后端服務器都將性能充分發揮,從而保持服務器集群的整體性能最優,這就是負載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
摘要:模式,單實例多進程,常用于多語言混編,比如等,不支持端口復用,需要自己做應用的端口分配和負載均衡的子進程業務代碼。就是我們需要一個調度者,保證所有后端服務器都將性能充分發揮,從而保持服務器集群的整體性能最優,這就是負載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
摘要:模式,單實例多進程,常用于多語言混編,比如等,不支持端口復用,需要自己做應用的端口分配和負載均衡的子進程業務代碼。就是我們需要一個調度者,保證所有后端服務器都將性能充分發揮,從而保持服務器集群的整體性能最優,這就是負載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
閱讀 3280·2023-04-26 02:42
閱讀 791·2021-10-09 09:41
閱讀 3191·2021-09-06 15:02
閱讀 700·2019-08-26 10:45
閱讀 480·2019-08-23 15:53
閱讀 733·2019-08-22 18:10
閱讀 550·2019-08-22 18:01
閱讀 3517·2019-08-22 17:34