国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書

這篇具有很好參考價值的文章主要介紹了最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前提:朋友弄了一個培訓機構,培訓考試合格后,給發(fā)證書,需要一個證書查詢系統(tǒng)。委托我給弄一個,花了幾個晚上給寫的證書查詢系統(tǒng)。

實現(xiàn)功能:

  1. 前端按照姓名+手機號碼進行證書查詢
  2. 證書信息展示+證書展示,支持點擊下載
  3. 后端證書信息錄入+帶一寸照片數(shù)據(jù)批量導入

技術棧:
4. ThinkPHP8.0
5. MySQL8.0.12
6. layui

有幾個技術點,得記錄下:
1、給一個證書模板、一寸照片、兩個電子印章圖片,這個技術點是:GD庫添加水印技術,水印添加也包括文字水印

添加擴展:

"ext-gd": "*",

相關代碼:

// 向不同格式的圖片中間畫一個字符串(也是文字水印)
public function image()
 {
     // $id = Request::param('id');
     $one = Db::table('certificate')->where(Request::param())->find();


     // $this->pic($one['id']);

     /*$one = [
         "certificate_no" => "440420230078",
         "create_time" => "2022-10-10",
         "end_time" => "2032-10-10",
         "id" => 8,
         "id_no" => "4404202206223919",
         "id_type" => "身份證",
         "institution" => "智能研究院",
         "job" => "電工",
         "name" => "曹操",
         "occupation" => "低壓電工證",
         "phone" => "13588889999",
         "sex" => "男",
         "skill_level" => "中級",
         "start_time" => "2022-10-10"
     ];*/
     // 圖片路徑
     $imagePath = './static/images/zsmb.png';
     // 圖片信息
     $imageInfo = getimagesize($imagePath);
     //  [0] => 2000 [1] => 1414 [2] => 3 [3] => width="2000" height="1414" [bits] => 8 [mime] => image/png

     // 圖片擴展名
     $imageExtension = image_type_to_extension($imageInfo[2], false);
     // png

     // 獲取圖片
     $func = 'imagecreatefrom' . $imageExtension;
     // imagecreatefrompng
     $image = $func($imagePath);
     /***************************** 文字水印開始 ********************************/
     // 水印字體
     $font = './static/fonts/SourceHanSansSC-Medium-2.otf';
     // 水印文字
     // $content = '曹操';
     // 水印顏色
     $color = imagecolorallocatealpha($image, 0, 0, 0, 30);
     // 添加水印
     imagettftext($image, 22, 0, 1450, 650, $color, $font, $one['name']);
     imagettftext($image, 22, 0, 1450, 740, $color, $font, $one['id_type']);
     imagettftext($image, 22, 0, 1450, 830, $color, $font, $one['id_no']);
     imagettftext($image, 22, 0, 1450, 910, $color, $font, $one['occupation']);
     imagettftext($image, 22, 0, 1480, 985, $color, $font, $one['job']);
     imagettftext($image, 22, 0, 1480, 1075, $color, $font, $one['skill_level']);
     imagettftext($image, 22, 0, 1450, 1155, $color, $font, $one['certificate_no']);
     imagettftext($image, 22, 0, 750, 1080, $color, $font, date("Y年n月j日", strtotime($one['create_time'])));
     imagettftext($image, 22, 0, 300, 1080, $color, $font, date("Y年n月j日", strtotime($one['create_time'])));
     imagettftext($image, 22, 0, 500, 498, $color, $font, $one['institution']);

     /***************************** 文字水印開始 ********************************/

     /***************************** 圖片水印開始 ********************************/
     // 獲取水印圖片
     $watermarkPath = './static/images/water.png';
     $watermarkInfo = getimagesize($watermarkPath);
     $watermarkExtension = image_type_to_extension(getimagesize($watermarkPath)[2], false);
     $func = 'imagecreatefrom' . $watermarkExtension;
     $watermark = $func($watermarkPath);
     // 添加圖片水印
     imagecopymerge($image, $watermark, 1280, 180, 0, 0, $watermarkInfo[0], $watermarkInfo[1], 100);
     // 銷毀水印圖片
     imagedestroy($watermark);

     // 生成二維碼
     $qr = "./static/images/qr.png";
     $str = 'http://thinkcms.cc/index/index/image?id=' . $one['id'];
     $img_data = \tekintian\TekinQR::getQRImg($str, 5, null, 3);
     file_put_contents($qr, $img_data);

     $watermarkInfo = getimagesize($qr);
     $watermarkExtension = image_type_to_extension(getimagesize($qr)[2], false);
     $func = 'imagecreatefrom' . $watermarkExtension;
     $watermark = $func($qr);
     // 添加圖片水印
     imagecopymerge($image, $watermark, 1580, 370, 0, 0, $watermarkInfo[0], $watermarkInfo[1], 100);
     // 銷毀水印圖片
     imagedestroy($watermark);

     $watermarkPath = './static/images/nyyz.png';
     $watermarkInfo = getimagesize($watermarkPath);
     $watermarkExtension = image_type_to_extension(getimagesize($watermarkPath)[2], false);
     $func = 'imagecreatefrom' . $watermarkExtension;
     $watermark = $func($watermarkPath);
     // 添加圖片水印
     imagecopymerge($image, $watermark, 220, 850, 0, 0, $watermarkInfo[0], $watermarkInfo[1], 100);
     // 銷毀水印圖片
     imagedestroy($watermark);

     $watermarkPath = './static/images/gjyz.png';
     $watermarkInfo = getimagesize($watermarkPath);
     $watermarkExtension = image_type_to_extension(getimagesize($watermarkPath)[2], false);
     $func = 'imagecreatefrom' . $watermarkExtension;
     $watermark = $func($watermarkPath);
     // 添加圖片水印
     imagecopymerge($image, $watermark, 720, 850, 0, 0, $watermarkInfo[0], $watermarkInfo[1], 100);
     // 銷毀水印圖片
     imagedestroy($watermark);

     /***************************** 圖片水印開始 ********************************/

     // 輸出圖片
     header('Content-Type:' . $imageInfo['mime']);
     $func = 'image' . $imageExtension;
     $func($image, null, 6);
     // 銷毀圖片
     imagedestroy($image);
     exit;
 }

最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書,php,證書查詢系統(tǒng),添加圖片水印、添加文字水印,電子證書技術實現(xiàn),掃碼查看電子證書

2、證書里的二維碼,掃碼就能掃碼出來,是PHP生成二維碼,其二維碼中間也是支持加logo的

添加擴展:

"tekintian/phpqrcode": "^1.1",

相關代碼:

// 生成二維碼
$qr = "./static/images/qr.png";
// 這個本地測試域名,不是外網(wǎng),掃碼不了,上線改成外網(wǎng)掃了才有效
$str = 'http://thinkcms.cc/index/index/image?id=' . $one['id'];
$img_data = \tekintian\TekinQR::getQRImg($str, 5, null, 3);
file_put_contents($qr, $img_data);

3、后臺實現(xiàn)帶圖片excel數(shù)據(jù)導入,這個摸索了點時間,因為PHPExcel停止維護了,改了半天源碼還有問題,最后放棄了,換了一個擴展。

添加擴展:

"phpoffice/phpspreadsheet": "^1.20.0"

相關代碼:

/**
 * 字母序列化為數(shù)字
 */
public function ABC2decimal($abc)
{
    $ten = 0;
    $len = strlen($abc);
    for ($i = 1; $i <= $len; $i++) {
        $char = substr($abc, 0 - $i, 1);//反向獲取單個字符
        $int = ord($char);
        $ten += ($int - 65) * pow(26, $i - 1);
    }
    return $ten;
}


public function excel()
{
    if ($file = request()->file('excel')) {
        try {
            $saveName = Filesystem::disk('public')->putFile('/static/upload/excels', $file);
            if (!is_file($saveName)) {
                return json(['code' => 1, 'msg' => '文件不存在', 'data' => null]);
            }
            $ext = pathinfo($saveName, PATHINFO_EXTENSION);
            // xls不支持圖片導入
            // if (!in_array($ext, ['xlsx', 'xls'])) {
            if (!in_array($ext, ['xlsx'])) {
                return json(['code' => 1, 'msg' => '文件類型不正確', 'data' => null]);
            }
            // 有兩種格式,xlsx和xls
            if ($ext == 'xlsx') {
                $objReader = IOFactory::createReader('Xlsx');
            } else {
                $objReader = IOFactory::createReader('Xls');
            }
            // 圖片保存路徑
            $imageFilePath1 = root_path() . '/public/'; // 圖片保存目錄
            $imageFilePath2 = 'static/upload/images/' . date("Ymd") . '/';
            $imageFilePath = $imageFilePath1 . $imageFilePath2;
            if (!file_exists($imageFilePath)) {
                mkdir("$imageFilePath", 0777, true);
            }
            // 載入excel文件
            $excel = $objReader->load($saveName);
            // 讀取第一張表
            $sheet = $excel->getActiveSheet();
            // 讀取總行數(shù)
            $highestRow = $sheet->getHighestRow();
            // 讀取第一張表轉換成數(shù)組
            $data = $sheet->toArray();

            // 處理圖片
            foreach ($sheet->getDrawingCollection() as $drawing) {
                list($startColumn, $startRow) = Coordinate::coordinateFromString($drawing->getCoordinates());
                $imageFileName = $drawing->getIndexedFilename();  // 獲取文件名
                switch ($drawing->getExtension()) {
                    case 'jpg':
                    case 'jpeg':
                        $source = imagecreatefromjpeg($drawing->getPath());
                        imagejpeg($source, $imageFilePath . $imageFileName);
                        break;
                    case 'gif':
                        $source = imagecreatefromgif($drawing->getPath());
                        imagegif($source, $imageFilePath . $imageFileName);
                        break;
                    case 'png':
                        $source = imagecreatefrompng($drawing->getPath());
                        imagepng($source, $imageFilePath . $imageFileName);
                        break;
                }
                $startColumn = $this->ABC2decimal($startColumn);
                $data[$startRow - 1][$startColumn] = $imageFilePath2 . $imageFileName;
            }

            // 數(shù)據(jù)寫入數(shù)據(jù)庫
            $add_data = [];
            for ($i = 1; $i <= $highestRow - 1; $i++) {
                $add_data[$i]['institution'] = $data[$i][0];
                $add_data[$i]['name'] = $data[$i][1];
                $add_data[$i]['sex'] = $data[$i][2];
                $add_data[$i]['phone'] = $data[$i][3];
                $add_data[$i]['id_type'] = $data[$i][4];
                $add_data[$i]['id_no'] = $data[$i][5];
                $add_data[$i]['occupation'] = $data[$i][6];
                $add_data[$i]['job'] = $data[$i][7];
                $add_data[$i]['skill_level'] = $data[$i][8];
                $add_data[$i]['certificate_no'] = $data[$i][9];
                $add_data[$i]['create_time'] = $data[$i][10];
                $add_data[$i]['start_time'] = $data[$i][11];
                $add_data[$i]['end_time'] = $data[$i][12];
                $add_data[$i]['path'] = $data[$i][13];
            }

            // 數(shù)據(jù)插入數(shù)據(jù)庫
            $success_count = Db::table('certificate')->insertAll($add_data);
            if ($success_count > 0) {
                return json(['code' => 0, 'msg' => '數(shù)據(jù)插入成功', 'data' => null]);
            } else {
                return json(['code' => 1, 'msg' => '數(shù)據(jù)插入失敗', 'data' => null]);
            }
        } catch (\Exception $e) {
            return json(['code' => 1, 'msg' => $e->getMessage(), 'data' => null]);
        }
    } else {
        return json(['code' => 1, 'msg' => '上傳文件不能為空', 'data' => null]);
    }
}
  1. ThinkPHP8.0開啟session,沒有采取前后端分離,就是前后端分離后,SEO不友好,再去前端優(yōu)化搜索,那還不如直接MVC來的快,所以用到了session。根據(jù)官方手冊沒有配置成功,session沒有生效,后面嘗試了下面的方法,兩者都進行配置才生效。這里記錄下。

全局config配置middleware.php中

<?php
// 中間件配置
return [
    // 別名或分組
    'alias'    => [],
    // 優(yōu)先級設置,此數(shù)組中的中間件會按照數(shù)組中的順序優(yōu)先執(zhí)行
    'priority' => ['think\middleware\SessionInit'],
];

后端應用middleware.php中

<?php
// 這是系統(tǒng)自動生成的middleware定義文件
return [
	// 無關代碼省略...
    \think\middleware\SessionInit::class
];

弄了寫數(shù)據(jù)模擬下,最終實現(xiàn)的功能成果如下:
最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書,php,證書查詢系統(tǒng),添加圖片水印、添加文字水印,電子證書技術實現(xiàn),掃碼查看電子證書
最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書,php,證書查詢系統(tǒng),添加圖片水印、添加文字水印,電子證書技術實現(xiàn),掃碼查看電子證書
最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書,php,證書查詢系統(tǒng),添加圖片水印、添加文字水印,電子證書技術實現(xiàn),掃碼查看電子證書文章來源地址http://www.zghlxwxcb.cn/news/detail-819414.html

到了這里,關于最新ThinkPHP版本實現(xiàn)證書查詢系統(tǒng),實現(xiàn)批量數(shù)據(jù)導入,自動生成電子證書的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 基于Java+Vue+uniapp微信小程序企業(yè)職工薪資查詢系統(tǒng)設計和實現(xiàn)

    基于Java+Vue+uniapp微信小程序企業(yè)職工薪資查詢系統(tǒng)設計和實現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計劃導師、Java領域優(yōu)質創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺優(yōu)質作者、專注于Java技術領域和學生畢業(yè)項目實戰(zhàn),高校老師/講師/同行交流合作 ? 主要內容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月04日
    瀏覽(24)
  • 《vue3實戰(zhàn)》通過indexOf方法實現(xiàn)電影評價系統(tǒng)的模糊查詢功能

    《vue3實戰(zhàn)》通過indexOf方法實現(xiàn)電影評價系統(tǒng)的模糊查詢功能

    目錄 前言 一、indexOf是什么?indexOf有什么作用? 含義: 作用: 二、功能實現(xiàn) 這段是查詢過程中過濾篩選功能的代碼部分: 分析: 這段是查詢用戶和性別功能的代碼部分: 分析: 三、最終效果圖 查詢輸入框所在圖: 輸入姓名羊和性別男模糊查詢后的效果圖: 輸入姓名羊和

    2024年02月10日
    瀏覽(24)
  • ASP.NET交通信息網(wǎng)上查詢系統(tǒng)的設計與實現(xiàn)(源代碼+論文+開題報告)

    當前我國交通網(wǎng)上信息系統(tǒng)的發(fā)展處于一個較落后的水平,廣大乘客可以獲得信息的方式很少,通常依賴于火車飛機時刻表,而汽車只能到車站查詢。為了解決這種問題,加快發(fā)展交通信息化,設計一個交通信息網(wǎng)上查詢系統(tǒng)是具有一定實際應用意義的。在此背景下,本文基于

    2024年02月09日
    瀏覽(21)
  • 基于微信小程序的公交車路線查詢系統(tǒng)的設計與實現(xiàn)(源碼+論文)_v_202

    基于微信小程序的公交車路線查詢系統(tǒng)的設計與實現(xiàn)(源碼+論文)_v_202

    摘 要 移動互聯(lián)網(wǎng)時代的到來,智能手機的普及,在眾多手機軟件中,微信被廣大用戶認可并廣泛被使用。隨著微信的發(fā)展,為滿足用戶通過微信進行公交線路查詢的需求,特開發(fā)了本基于微信小程序的公交車路線查詢系統(tǒng)。 本文主要介紹了微信小程序的實時公交查詢系統(tǒng)的

    2024年02月04日
    瀏覽(21)
  • 計算機畢業(yè)設計 基于java的高校競賽和考級查詢系統(tǒng)的設計與實現(xiàn) Java實戰(zhàn)項目 附源碼+文檔+視頻講解

    計算機畢業(yè)設計 基于java的高校競賽和考級查詢系統(tǒng)的設計與實現(xiàn) Java實戰(zhàn)項目 附源碼+文檔+視頻講解

    博主介紹:?從事軟件開發(fā)10年之余,專注于Java技術領域、Python人工智能及數(shù)據(jù)挖掘、小程序項目開發(fā)和Android項目開發(fā)等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優(yōu)質作者? ??文末獲取源碼聯(lián)系?? ???? 精彩專欄推薦訂閱???? 不然下次找不到喲 ——————————

    2024年02月07日
    瀏覽(24)
  • 【數(shù)據(jù)庫課設】圖書館資源管理系統(tǒng) 源碼+流程圖+結構設計(借還圖書 逾期罰款 圖書管理 讀者管理 信息查詢)python實現(xiàn)

    【數(shù)據(jù)庫課設】圖書館資源管理系統(tǒng) 源碼+流程圖+結構設計(借還圖書 逾期罰款 圖書管理 讀者管理 信息查詢)python實現(xiàn)

    一個管理員編號對應一個密碼,且需要有管理員注冊密匙。 可以在圖書信息表中錄入、修改、刪除圖書。 可以在圖書信息表中查詢書籍。 可以編輯圖書借閱、歸還信息。 可以編輯欠款信息。 可以編輯讀者信息表。 圖書館注冊,獲得讀者編號。 可以在圖書信息表中查閱書籍

    2024年02月10日
    瀏覽(25)
  • Linux 系統(tǒng)服務日志查詢 journalctl:查詢 systemd 日記

    Linux 系統(tǒng)服務日志查詢 journalctl:查詢 systemd 日記

    systemd 在取代 SUSE Linux Enterprise 12 中的傳統(tǒng) init 腳本時(參見第 13 章 “systemd 守護程序”),引入了自身的稱為日記的日志記錄系統(tǒng)。由于所有系統(tǒng)事件都將寫入到日記中,因此,用戶不再需要運行基于 syslog 的服務。 日記本身是 systemd 管理的系統(tǒng)服務,全名為 systemd-journal

    2024年02月07日
    瀏覽(21)
  • 大廠報價查詢系統(tǒng)性能優(yōu)化之道!

    大廠報價查詢系統(tǒng)性能優(yōu)化之道!

    機票查詢系統(tǒng),日均億級流量,要求高吞吐,低延遲架構設計。提升緩存的效率以及實時計算模塊長尾延遲,成為制約機票查詢系統(tǒng)性能關鍵。本文介紹機票查詢系統(tǒng)在緩存和實時計算兩個領域的架構提升。 1.1 機票搜索的業(yè)務特點 機票搜索業(yè)務:輸入目的地,然后點擊搜索

    2024年03月25日
    瀏覽(22)
  • Php+sql成績查詢系統(tǒng)(系統(tǒng)+論文+答辯PPT)

    眾所周知,現(xiàn)代信息技術是現(xiàn)代教育技術的基礎和核心,培養(yǎng)和創(chuàng)新型的人才必須依靠現(xiàn)代教育技術。從這一層意義上講,我們說掌握一定的計算機應用技能已經(jīng)成為國家未來的合格建設者的必備素質,所以現(xiàn)在在大學中對非計算機系的學生開設了計算機文化基礎課,并且通

    2024年02月09日
    瀏覽(17)
  • 基于java+springboot+vue城市軌道交通線路查詢系統(tǒng)-公交車線路查詢

    基于java+springboot+vue城市軌道交通線路查詢系統(tǒng)-公交車線路查詢

    本系統(tǒng)是針對目前交通管理的實際需求,從實際工作出發(fā),對過去的市軌道交通線路查詢系統(tǒng)存在的問題進行分析,完善用戶的使用體會。采用計算機系統(tǒng)來管理信息,取代人工管理模式,查詢便利,信息準確率高,節(jié)省了開支,提高了工作的效率。 本系統(tǒng)結合計算機系統(tǒng)的

    2024年02月05日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包