thinkphp---電子簽章功能開發示例

最近在做一個項目,需要開發電子簽章的功能,也就是電子合同,下面:

具體思路:利用PDF合成,將所需要的文字,圖片,合成到PDF裏面。

首先下載 Fpdi 庫:

https://gitee.com/meiyouzhanghao/fpdi

放到 extend 裏面:

 具體代碼示例:

<?php
namespace app\index\controller;
use app\BaseController;

use Fpdi\Fpdi;

class IndexController extends BaseController
{
    public function index()
    {
        return redirect('/index');
    }

    /**
     * test
     */
    public function test()
    {
        // $this->create(); // 生成PDF
        $this->sign();
    }
/** * sign */ public function sign() { $pdf = new Fpdi(); $pdf->AddGBFont(); $file = public_path() . '/pdf/test.pdf'; // 獲取頁數 $pageCount = $pdf->setSourceFile($file); //遍歷所有頁面 for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { //導入頁面 $templateId = $pdf->importPage($pageNo); //獲取導入頁面的大小 $size = $pdf->getTemplateSize($templateId); //創建頁面(橫向或縱向取決於導入的頁面大小) if ($size['width'] > $size['height']) { $pdf->AddPage('L', array($size['width'], $size['height'])); } else { $pdf->AddPage('P', array($size['width'], $size['height'])); } if ($pageNo == $pageCount) { $imgFile = public_path() . '/pdf/mine.png'; // 圖片的 X座標 Y座標 寬度 高度 $pdf->Image($imgFile, 95, 85, 50, 50, 'png'); } if ($pageNo == $pageCount) { $signFile = public_path() . '/pdf/sign.png'; $pdf->Image($signFile, 95, 132, 40, 40, 'png'); } $pdf->SetFont('GB', '', 10); if ($pageNo == 1) { // X座標 Y座標 $pdf->Text(90, 98, iconv("UTF-8", "gbk", '8')); $pdf->Text(111, 98, iconv("UTF-8", "gbk", '12')); $pdf->Text(142, 98, iconv("UTF-8", "gbk", '2023')); $pdf->Text(164, 98, iconv("UTF-8", "gbk", '12')); $pdf->Text(39, 109, iconv("UTF-8", "gbk", '20')); } if ($pageNo == 2) { $pdf->Text(66, 98, iconv("UTF-8", "gbk", '劉備')); $pdf->Text(66, 109, iconv("UTF-8", "gbk", '330108192238333333')); $pdf->Text(66, 142, iconv("UTF-8", "gbk", '趙子龍')); $pdf->Text(66, 153, iconv("UTF-8", "gbk", '雲南職培教育科技有限公司')); } // 水印背景 // $pdf->SetTextColor(211, 211, 211); // $txt = iconv("UTF-8", "gbk", '張三 330192238333333 張三 330192238333333 張三 330192238333333 張三 330192238333333 張三 330192238333333 張三 330192238333333'); // for ($i=2; $i<6; $i++) { // $pdf->RotatedText(15, $i*50, $txt, 30); // } //使用導入的頁面 $pdf->useTemplate($templateId); } $pdf->Output('F', 'pdf/results.pdf'); die(); } /** * create */ public function create() { $pdf = new Fpdi(); $pdf->AddGBFont(); $pdf->AddPage(); $pdf->SetFont('GB', '', 10); $txt = <<<EOF 甲方:宇宙有點帥科技有限公司 乙方:    身份證號: 歡迎使用 FPDI 1.5.4!   據報道,目前,天文學家最新發明一種方法“透視”早期宇宙的迷霧,這樣便於探測到宇宙早期恆星和星系釋放的光線。   觀察這些宇宙初期恆星誕生是科學家長期以來的一個目標,因爲這將有助於解釋宇宙是如何從大爆炸後的虛無境地演變成 138 億年後現今觀察到的複雜宇宙,現在這將是詹姆斯·韋伯太空望遠鏡和平方公里陣列射電望遠鏡(SKA)的主要勘測任務之一。   但是詹姆斯·韋伯太空望遠鏡觀測的是紅外波長範圍,而新一代陸基 SKA 望遠鏡(預計 2024 年前後完工,真正投入使用將在 2030 年),將通過射電電波研究早期宇宙。   對於當前正在使用的射電望遠鏡而言,其技術挑戰在於通過厚密氫雲探測到恆星信號,氫雲能更好地吸收光線,從而阻擋人們的觀測視野。射電信號失真也會成爲干擾因素,因此,探測宇宙初期恆星是現代射電宇宙學面臨的重大挑戰之一。   例如:天文學家試圖探測比銀河系信號微弱 10 萬倍的系外信號,目前,英國劍橋大學研究人員最新開發一種數學方法,可使他們“透視”原始星雲和其他宇宙噪聲信號。因此,這將使他們避免由射電望遠鏡引起信號失真的不利影響。   該觀點是宇宙氫分析射電實驗(REACH)的一部分,這將允許天文學家通過與氫雲的相互作用來觀察宇宙初期的恆星,就像我們通過觀察霧中陰影來推斷景觀一樣。希望它能提高射電望遠鏡觀測宇宙演變關鍵時期的質量和可靠性,預計宇宙氫分析射電實驗的第一次觀測將於今年晚些時候進行。   該研究報告負責人、劍橋大學卡文迪什實驗室埃洛伊·德萊拉·阿西多(Eloy de Lera Acedo)博士說:“在宇宙第一批恆星形成的時候,宇宙基本上空蕩蕩的,主要由氫和氦構成,在引力作用下,這些元素最終聚集在一起,形成了適合核聚變的條件,這將促進第一批恆星的誕生,但是它們被所謂的中性氫雲包圍,中性氫雲能較好地吸收光線,所以人們很難直接探測或者觀察氫雲後方的光線。”   2018 年,另一支研究小組發表研究結果,暗示可能探測到宇宙最早的光,但當時他們無法重複該實驗結果,從而讓他們相信最初的研究結果可能源自望遠鏡的干擾。阿西多博士說:“最初的研究結果需要新的物理學理論進行解釋,因爲氫氣的溫度應該比我們理解的宇宙溫度閾值低很多,或者無法解釋的背景輻射溫度升高,可能是衆所周知的宇宙微波背景輻射所致,如果我們能確認之前實驗中發現的光信號來自於宇宙第一批恆星,那麼這項研究的意義將非常巨大。”   爲了研究宇宙發展的這段時期,通常被稱爲“宇宙黎明”,天文學家使用了 21 釐米長信號線,這是早期宇宙氫原子電磁輻射信號,他們尋找一種射電信號,能測量對比氫輻射和氫霧背景輻射之間的差異。   該方法是由阿西多博士和同事使用貝葉斯統計法來探測望遠鏡干擾和宇宙噪音信號,這樣信號就被分離開來,要做到這一點,需要不同領域的最新技術進行驗證。   據悉,目前位於南非卡魯射電保護區的平方公里陣列射電望遠鏡項目已完成,該地區因具有優越的天空射電觀測條件而被選中,這裏遠離人爲製造的射頻干擾,例如:電視和調頻無線電信號等。   基於對宇宙微波背景輻射(CMB)的研究分析,人們已較深入地理解大爆炸和宇宙初期狀況,但是宇宙第一束光線的形成時間仍是宇宙探索史上一個未揭曉的謎團。目前這項最新研究發表在近期出版的《自然天文學雜誌》上。 EOF; $pdf->Write(10, iconv("UTF-8", "gbk", $txt)); $pdf->Output('F', 'pdf/test.pdf'); } }

打完收工!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章