摘要:在開發(fā)一個基于的系統(tǒng)的時(shí)候,有一個需求是根據(jù)用戶提供的信息,生成一個文件,并通過電子郵件發(fā)送給客戶。有了這兩個信息,調(diào)用的對應(yīng)方法就可以生成文件。生成文件后,使用內(nèi)置的函數(shù)發(fā)送即可。本文始發(fā)于,經(jīng)作者同意轉(zhuǎn)載。
在開發(fā)一個基于 WordPress 的 CRM 系統(tǒng)的時(shí)候,有一個需求是根據(jù)用戶提供的信息,生成一個 PDF 文件,并通過電子郵件發(fā)送給客戶。沒有做過的朋友可能會認(rèn)為這是一個比較麻煩的需求,其實(shí)我們把這個需求拆分開來做,就很簡單了,首先,獲取用戶信息,然后使用用戶信息生成 PDF 文件,最后再把生成的 PDF 文件通過 Email 發(fā)送給客戶就可以了 。
knp-snappy 是一個可以幫助我們從 URL 或 HTML 文件生成 PDF 的 PHP 庫,該庫依賴 wkhtmltopdf,如果操作系統(tǒng)中沒有安裝,按照前面網(wǎng)址中的說明安裝即可。安裝后,我們通過 Composer 安裝,然后再包含 Composer 生成的自動加載文件到主題或插件中。
composer require knplabs/knp-snappy使用 knp-snappy 生成 PDF 文件
首先,我們需要指定生成的 PDF 文件保存的位置,然后指定用來生成 URL 文件的 HTML 文件或字符串。有了這兩個信息,調(diào)用 knp-snappy 的對應(yīng)方法就可以生成 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 框架中的方法,你可以使用自己的函數(shù)替換,或者可以直接從 URL 中生成 PDF,具體使用方法請參考 knp-snappy 使用文檔。
如果發(fā)現(xiàn) PDF 中顯示不了中文或者中文是亂碼的,可能是服務(wù)器操作系統(tǒng)中沒有中文字體,從 Windows 中復(fù)制 simsun.ttf 或者中文字體到 /usr/share/fonts 目錄中即可。
通過電子郵件發(fā)送生成的 PDF 文件
生成后的文件保存在我們在代碼中指定的位置。生成 PDF 文件后,使用 WordPress 內(nèi)置的 wp_mail 函數(shù)發(fā)送即可。獲取用戶電子郵件、設(shè)置郵件標(biāo)題、內(nèi)容的方法很簡單,WordPress 官方也有介紹,這里就不多說了。
wp_mail($to, $subject, $message, $headers, [$file]);請注意文件安全
為了防止 PDF 文件泄漏,我們需要采取一些安全措施,比如隨機(jī)生成 PDF 文件名,通過 Ngnix 設(shè)置,禁止用戶下載 PDF 文件,或者郵件發(fā)送后,直接刪除 PDF 文件等等。
本文始發(fā)于:https://www.wpzhiku.com/wordp...,經(jīng)作者同意轉(zhuǎn)載。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31332.html
摘要:在兩年前的年底,我在上上線了我自己的達(dá)人課,如今,已經(jīng)過去了當(dāng)初約定的銷售時(shí)間,我決定將這個達(dá)人課開放給大家來看,讓更多的人掌握的開發(fā)能力。內(nèi)容持續(xù)更新這個電子書的內(nèi)容我后續(xù)還會繼續(xù)更新。我自己仍然在使用,相關(guān)的一些實(shí)踐也會分享到電子書里。 在兩年前的 2017 年底,我在 GitChat 上上線了我自己的 WordPress 達(dá)人課,如今,已經(jīng)過去了當(dāng)初約定的銷售時(shí)間,我決定將這個達(dá)...
摘要:模式,單實(shí)例多進(jìn)程,常用于多語言混編,比如等,不支持端口復(fù)用,需要自己做應(yīng)用的端口分配和負(fù)載均衡的子進(jìn)程業(yè)務(wù)代碼。就是我們需要一個調(diào)度者,保證所有后端服務(wù)器都將性能充分發(fā)揮,從而保持服務(wù)器集群的整體性能最優(yōu),這就是負(fù)載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
摘要:模式,單實(shí)例多進(jìn)程,常用于多語言混編,比如等,不支持端口復(fù)用,需要自己做應(yīng)用的端口分配和負(fù)載均衡的子進(jìn)程業(yè)務(wù)代碼。就是我們需要一個調(diào)度者,保證所有后端服務(wù)器都將性能充分發(fā)揮,從而保持服務(wù)器集群的整體性能最優(yōu),這就是負(fù)載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
摘要:模式,單實(shí)例多進(jìn)程,常用于多語言混編,比如等,不支持端口復(fù)用,需要自己做應(yīng)用的端口分配和負(fù)載均衡的子進(jìn)程業(yè)務(wù)代碼。就是我們需要一個調(diào)度者,保證所有后端服務(wù)器都將性能充分發(fā)揮,從而保持服務(wù)器集群的整體性能最優(yōu),這就是負(fù)載均衡。 showImg(https://segmentfault.com/img/remote/1460000019425391?w=1440&h=1080); Nod...
閱讀 3302·2023-04-26 02:42
閱讀 803·2021-10-09 09:41
閱讀 3251·2021-09-06 15:02
閱讀 760·2019-08-26 10:45
閱讀 493·2019-08-23 15:53
閱讀 752·2019-08-22 18:10
閱讀 560·2019-08-22 18:01
閱讀 3526·2019-08-22 17:34