TCPDF生成PDF文件,含jpjraph生成雷达图
TCPDF生成PDF文件,含jpjraph生成雷达图
依赖自行安装
"tecnickcom/tcpdf": "^6.6","amenadiel/jpgraph": "4"
雷达图生成
中文字体添加安装
没有封装,只作为测试案例展示
// 创建新的PDF文档$pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// $pdf = new \TCPDF('P', 'mm', 'A4', true, 'UTF-8', false, true);$pdf->SetPrintHeader(false);$pdf->SetPrintFooter(false);//禁用自动分页$pdf->SetAutoPageBreak(false);// 设置文档信息
// $pdf->SetCreator(PDF_CREATOR); //设置 PDF 文件的创建者。
// $pdf->SetAuthor('Your Name'); //设置 PDF 文件的作者姓名。
// $pdf->SetTitle('Radar Chart'); //设置 PDF 文件的标题。
// $pdf->SetSubject('TCPDF Tutorial');//设置 PDF 文件的主题。
// $pdf->SetKeywords('TCPDF, PDF, example, test, guide');//设置 PDF 文件的关键词。
// 设置默认的页眉数据
// $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 006', PDF_HEADER_STRING);
// 设置页眉和页脚字体
// $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
// $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// 设置默认等宽字体
// $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// 设置边距
// $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
// $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
// $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// 设置自动分页
// $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// 设置图像缩放因子
// $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// set font
// $pdf->SetFont('helvetica', '', 10);$pageWidth = $pdf->getPageWidth();// 页宽度$pageHeight = $pdf->getPageHeight();// 页宽度$titleFont = 'yahei'; // 字体$titleFontSize = 16; // 字号//封面$pdf->AddPage();$cover_img = 'https://******.png';$pdf->Image($cover_img, 0, 0, $pageWidth, $pageHeight);// 设置文字颜色$pdf->SetTextColor(0,0,0);// 设置字体和字号$pdf->SetFont($titleFont, '', $titleFontSize-6);$pdf->Text(23, 275, '扫一扫在线浏览报告');//======================编号// 设置文字颜色$pdf->SetTextColor(0,0,0);// 设置字体和字号$pdf->SetFont($titleFont, '', $titleFontSize-6);$pdf->Text(18, 30, '报告编号:');//======================自测时间$dateTime = new \DateTime($row['create_time']);$yearMonthDay = $dateTime->format('Y-m-d');$pdf->Text(157, 265, '自测时间:'.$yearMonthDay);//======================报告单位$pdf->Text(115, 271, '报告提供单位:');//======================企业名称// 设置文字颜色$pdf->SetTextColor(67, 16, 16);// 设置字体和字号$pdf->SetFont($titleFont, '', $titleFontSize+3);$pdf->Text($pdf->GetX()-180, $pdf->GetY()-145, $qy_data['Name'] ?? '');//第一页$pdf->AddPage();$headerImgPath = 'https://*****.png';$footerImgPath = 'https://******.png';$headerImgHeight = 30; // 页眉图片高度$footerImgHeight = 30; // 页脚图片高度// 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);//================开始========================// 设置标题样式$titleWidth = $pageWidth - 20; // 标题宽度(以点为单位)$titleHeight = 15; // 标题高度(以点为单位)$titleBackgroundColor = array(0, 130, 237); // 背景颜色(RGB颜色值)$titleTextColor = array(255, 255, 255); // 文字颜色(RGB颜色值)// 设置背景颜色$pdf->SetFillColor($titleBackgroundColor[0], $titleBackgroundColor[1], $titleBackgroundColor[2]);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);// 设置字体和字号$pdf->SetFont($titleFont, 'B', $titleFontSize);// 绘制带有背景颜色的矩形作为标题$pdf->Rect(10, 25, $titleWidth, $titleHeight, 'F');// 在标题矩形内居中显示标题文本$titleText = '企业概要';$pdf->Text(12, 29, $titleText);//===================黑字文案=================$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 12);$pdf->Text(12, 45, '企业基本信息数据来源于测试主体在相关信息公示、公开信息数据整理分析所得');//======================// 设置背景颜色$pdf->SetFillColor(95, 183, 255);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);$pdf->Rect(10, 55, $titleWidth, $titleHeight-2, 'F');// 在标题矩形内居中显示标题文本$pdf->SetFont($titleFont, 'B', 12);$titleText = '基本信息';$pdf->Text(12, 59, $titleText);$pdf->Ln(12); // 换行// 设置字体$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 8);// 表格数据$data = [['企业名称', $qy_data['Name'] ?? '', '统一社会信用代码', $qy_data['CreditCode'] ?? ''],['法人代表', $qy_data['OperName'] ?? '', '注册资本', $qy_data['RegistCapi'] ?? ''],['企业类型', $qy_data['EconKind'] ?? '', '登记状态', $qy_data['Status'] ?? ''],['成立日期', $qy_data['StartDate'] ? date('Y-m-d',strtotime($qy_data['StartDate'])) : '', '核准日期', $qy_data['CheckDate'] ? date('Y-m-d',strtotime($qy_data['CheckDate'])) : ''],['营业期限', date('Y-m-d',strtotime($qy_data['TermStart'])).'至'.$qy_data['TeamEnd'] ? date('Y-m-d',strtotime($qy_data['TeamEnd'])) :'无固定期限', '登记机关', $qy_data['BelongOrg'] ?? ''],
// ['注册地址', 'B4', 'C4', 'D4'],
// ['经营范围', 'B4', 'C4', 'D4'],];// 遍历表格数据$tHeight = 30;foreach ($data as $key => $val) {foreach ($val as $colIndex => $cell) {// 设置单元格背景颜色if ($colIndex == 0 || $colIndex == 2) {$pdf->SetFillColor(244, 244, 244); // 淡灰色背景$tWidth = 30;$align = 'C';} else {$pdf->SetFillColor(255, 255, 255); // 白色背景$tWidth = 65;$align = 'L';}// 创建单元格$pdf->Cell($tWidth, 10, $cell, ['LTRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 0, $align, 1);}$pdf->Ln(); // 换行}// 合并最后一行的后三列
// $pdf->SetXY(12, $pdf->GetY()); // 设置位置为当前 Y 坐标$tWidth = 30;$pdf->SetFillColor(244, 244, 244); // 淡灰色背景$pdf->Cell($tWidth, 10, '注册地址', 1, 0, 'C',1);$pdf->SetFillColor(255, 255, 255); // 白色背景$pdf->Cell($tWidth + 130, 10, $qy_data['Address']??'', ['LTRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 1, 'L', 1, '', 3);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景$contentHeight = $pdf->GetStringHeight($tWidth + 130,$qy_data['Scope']??'');$rowHeight = max(10, $contentHeight)+2; // 行高度,取标题和内容高度的最大值$pdf->Cell($tWidth, $rowHeight, '经营范围', 1, 0, 'C',1);$pdf->MultiCell($tWidth + 130, $rowHeight, $qy_data['Scope']??'', ['LTRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 1,'', '', true, 0, false, true, $rowHeight, 'M');============2. 企业投资人信息=======
/// 表格数据
// $data = [
// [
// "KeyNo" => "1xxxxxxxxxxxxxxxxx",
// "StockName" => "1xxx",
// "StockType" => "1自然人股东1",
// "StockPercent" => "12.8338%",
// "ShouldCapi" => "1641.6913",
// "ShoudDate" => "1007-10-22",
// "StakeDate" => "1007-08-22",
// "CreditCode" => "1xxxxxxxxxxxxx"
// ],[
// "KeyNo" => "2xxxxxxxxxxxxxxxxx",
// "StockName" => "2xxx",
// "StockType" => "自然人股东2",
// "StockPercent" => "22.8338%",
// "ShouldCapi" => "2641.6913",
// "ShoudDate" => "2007-10-22",
// "StakeDate" => "2007-08-22",
// "CreditCode" => "2xxxxxxxxxxxxxx"
// ]
// ];$data = $qy_datas['t']['Result'];if(!$data){$data = [["KeyNo" => "-","StockName" => "-","StockType" => "-","StockPercent" => "-","ShouldCapi" => "-","ShoudDate" => "-","StakeDate" => "-","CreditCode" => "-"]];}// 检查是否需要换页if ($pdf->GetY() + 20 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12);}$pdf->SetFont($titleFont, 'B', 12);// 设置背景颜色$pdf->SetFillColor(95, 183, 255);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);$pdf->Rect($pdf->GetX(), $pdf->GetY()+3, $titleWidth, $titleHeight-2, 'F');// 在标题矩形内居中显示标题文本$titleText = '企业投资人信息';$pdf->Text(12, $pdf->GetY()+7, $titleText);$pdf->Ln(12); // 换行// 遍历表格数据foreach ($data as $key => $val) {// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12);}// 设置字体$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 8);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '投资人姓名', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['StockName'], 1, 0, 'L', 1);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '投资人类型', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['StockType'], 1, 1, 'L', 1);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '持股比例', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['StockPercent'], 1, 0, 'L', 1);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '认缴出资额', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['ShouldCapi'], 1, 1, 'L', 1);$pdf->Ln(2); // 换行}//============3. 企业资质(如高新技术企业、创新型/科技型中小企业)=======// 表格数据
// $data = [
// [
// "Name" => "高新技术企业",
// "Level" => "国家级",
// "Source" => "关于辽宁省2020年第三批高新技术企业备案的复函",
// "PublishOffice" => "全国高新技术企业认定管理工作领导小组办公室",
// "PublishDate" => "2021-01-18",
// "BegingDate" => "2020-12-01",
// "DeadLine" => "2023-12-01"
// ],
// [
// "Name" => "科技型中小企业",
// "Level" => "国家级",
// "Source" => "辽宁省2020年第五批入库科技型中小企业名单公告",
// "PublishOffice" => "辽宁省科学技术厅",
// "PublishDate" => "2020-11-30",
// "BegingDate" => "2020-11-30",
// "DeadLine" => "2023-11-30"
// ]
// ];$data = $qy_datas['z']['Result']['Data'];if(!$data){$data = [["Name" => "-","Level" => "-","Source" => "-","PublishOffice" => "-","PublishDate" => "-","BegingDate" => "-","DeadLine" => "-"]];}// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12);}// 设置背景颜色$pdf->SetFillColor(95, 183, 255);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);$pdf->Rect($pdf->GetX(), $pdf->GetY(), $titleWidth, $titleHeight-2, 'F');$pdf->SetFont($titleFont, 'B', 12);// 在标题矩形内居中显示标题文本$titleText = ' 企业资质(如高新技术企业、创新型/科技型中小企业)';$pdf->Text(12, $pdf->GetY()+4, $titleText);//=====表格$pdf->Ln(12); // 换行// 遍历表格数据foreach ($data as $key => $val) {// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12);}// 设置字体$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 8);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '资质名称', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['Name'], 1, 0, 'L', 1);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '级别', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['Level'], 1, 1, 'L', 1);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '来源', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['Source'], 1, 0, 'L', 1);$pdf->SetFillColor(244, 244, 244); // 淡灰色背景// 创建单元格$pdf->Cell(30, 10, '发布单位', 1, 0, 'C', 1);$pdf->SetFillColor(255, 255, 255); // 白色背景// 创建单元格$pdf->Cell(65, 10, $val['PublishOffice'], 1, 1, 'L', 1);$pdf->Ln(2); // 换行}//===================第二页======================$pdf->AddPage();// 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12);//=============================// 设置背景颜色$pdf->SetFillColor($titleBackgroundColor[0], $titleBackgroundColor[1], $titleBackgroundColor[2]);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);// 设置字体和字号$pdf->SetFont($titleFont, 'B', $titleFontSize);// 绘制带有背景颜色的矩形作为标题$pdf->Rect(10, 25, $titleWidth, $titleHeight, 'F');// 在标题矩形内居中显示标题文本$titleText = '企业评测结果概览';$pdf->Text(12, 29, $titleText);$pdf->Ln(); // 换行$scoreImg = 'https://******.png';$pdf->Image($scoreImg, 35, 45, 135, 45, '', '', 'C', false, 300, '', false, false, 0);
//============================分数================================$zongScore = Question::with(['record'])->where(['gp_id' => 1, 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->sum('record.result_value');$pdf->SetTextColor(34, 84, 244);$pdf->SetFont($titleFont, '', 19);if($zongScore>99){$pdf->Text(48, 49, $zongScore); }elseif($zongScore<10){$pdf->Text(53, 49, $zongScore);}else{$pdf->Text(50, 49, $zongScore); }$pdf->SetTextColor(50, 113, 229);$pdf->SetFont($titleFont, '', 24);if($row['score']>100){$pdf->Text(92, 62, $row['score']);}else{$pdf->Text(96, 62, $row['score']); }$pdf->SetTextColor(98, 199, 184);$pdf->SetFont($titleFont, '', 19);if($row['score']-$zongScore>99){$pdf->Text(131, 52, $row['score']-$zongScore);}else{$pdf->Text(133, 52, $row['score']-$zongScore);}$analysis = 'https://********.png';$pdf->Image($analysis, 10, 100, $titleWidth, 52, '', '', 'C', false, 300, '', false, false, 0);$pdf->SetTextColor(44,44,44);$pdf->SetFont($titleFont, '', 12);$zong = '本次报告测评结果分为【综合评汉分数】与【维度评测分数】两部分组成,总分为200分。在本次测评中,您的企业综合评测得分为X分,维度评测分数为Y分。您的综合评指标存在不足,上年度研发占比、上年度获得机构融资总额未满足,需有针对性地加强。维度评测得分<60分,专业化、精细化、特色化、创新力方面需有针对性地加强,经过专业辅导后可满足申报条件。如您的企业有申报需求,可在线咨询平台专家,专家会根据您报告得分的具体情况为您提供专业建议并制定申报辅导方案。';$pdf->MultiCell(145, 0, $zong, 0, 'L', false, 1, 52, 103, true, 0, false, true, 0, 'T', false);//=======================综合评测分数分析=======================================$pdf->SetFillColor($titleBackgroundColor[0], $titleBackgroundColor[1], $titleBackgroundColor[2]);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);// 设置字体和字号$pdf->SetFont($titleFont, 'B', $titleFontSize);// 绘制带有背景颜色的矩形作为标题$pdf->Rect(10, 166, $titleWidth, $titleHeight, 'F');// 在标题矩形内居中显示标题文本$titleText = '综合评测分数分析';$pdf->Text(12, 170, $titleText);//============================已满足条件分析==============$pdf->Ln(12); // 换行
// $pdf->SetFont($titleFont, '', 12);
// $pdf->SetFillColor(95, 183, 255);
// $pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);
// $pdf->Rect(10, 174, $titleWidth, $titleHeight-2, 'F');
// $pdf->Text(12, 178, '已满足条件分析');// $pdf->Ln(14); // 换行// 设置字体$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 8);// 表格数据$data = Question::with(['record'])->where(['gp_id' => 1, 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->select();
// echo json_encode($data);
// $data = [
// '从事特定细分市场时间达到2年以上',
// '企业从事特定细分市场已有2年以上,满足条件。',
// ];// 自定义排序函数,根据 result_value 的值进行排序usort($data, function($a, $b) {if ($a['record']['result_value'] > 0 && $b['record']['result_value'] <= 0) {return -1; // $a 在 $b 之前} elseif ($a['record']['result_value'] <= 0 && $b['record']['result_value'] > 0) {return 1; // $a 在 $b 之后} else {return 0; // 保持原来的顺序}});
// echo json_encode($datas);// 遍历表格数据$is_true = 0;$is_false = 0;foreach ($data as $key => $val) {if($key < 6){//判断第6题是否选择正确,暂时用下面的空字符串和null判断
// if($key == 5){
// $select_data = QuestionSelect::where(['record_id' => $val['record']['id']])->value('select_data');
// $val['record']['result_value']=1;
// }
//==========已满足、未满足大标题// 检查是否需要换页if ($pdf->GetY() + 35 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12); // 换行}if($val['record']['result_value']>0 || ($val['record']['result_value']==0 && $val['record']['data'] === '')){if($is_true == 0){$pdf->Ln(); // 换行$pdf->SetFont($titleFont, 'B', 12);$pdf->SetFillColor(95, 183, 255);$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);$pdf->Rect($pdf->GetX(), $pdf->GetY()-6, $titleWidth, $titleHeight-2, 'F');$pdf->Text($pdf->GetX(), $pdf->GetY()-2, ' 已满足条件分析');$pdf->Ln(12); // 换行$is_true = 1;}$pdf->SetTextColor(95, 188, 102);$successImg = 'https://**********.png';}else{if($is_false == 0){$pdf->Ln(); // 换行$pdf->SetFont($titleFont, 'B', 12);$pdf->SetFillColor(95, 183, 255);$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);$pdf->Rect($pdf->GetX(), $pdf->GetY()-6, $titleWidth, $titleHeight-2, 'F');$pdf->Text($pdf->GetX(), $pdf->GetY()-2, '未满足条件分析');$pdf->Ln(12); // 换行$is_false = 1;}$pdf->SetTextColor(239, 56, 34);$successImg = 'https://**********.png';}// 检查是否需要换页if ($pdf->GetY() + 35 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12); // 换行}$pdf->SetFillColor(233, 233, 233); // 淡灰色背景$pdf->Cell(10, 10, '', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',1);$pdf->SetFont($titleFont, '', 10);$pdf->Cell($titleWidth-30, 10, $val['name'], ['LTRB' => ['width' => 0.1, 'color' => [233, 233, 233]]], 0, 'L', 1);$pdf->SetTextColor(0, 0, 0);$pdf->Cell(20, 10, '', ['LTRB' => ['width' => 0.1, 'color' => [233, 233, 233]]], 1, 'L', 1);$pdf->Image($successImg, $pdf->GetX() + 3, $pdf->GetY()-8, 5);$pdf->SetFillColor(255, 255, 255); // 白色背景$pdf->SetTextColor(0, 140, 255);if($key == 5 && $val['record']['data'] === null){ //第六题没有分数判断data为null还是空字符串$content = '企业已满足1.近三年获得过省级科技奖励,并排名前三2.近三年获得国家级科技奖励,并在获奖单位中排名前五3.近两年研发费用总额均值在1000万元以上4.近两年新增股权融资总额(合格机构投资者实缴金额)达到6000万元以上4.近三年进入“创客中国”中小企业创新创业大赛全国500强企业#其中一项或多项,满足条件。';$contentHeight = $pdf->GetStringHeight($tWidth + 130,$content);$rowHeight = max(10, $contentHeight); // 行高度,取标题和内容高度的最大值$pdf->Cell(25, $contentHeight, '【大师兄点评】', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',0);$pdf->SetTextColor(144, 144, 144);$pdf->MultiCell($tWidth + 135, $rowHeight, $content, ['TRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 1,'', '', true, 0, false, true, $rowHeight, 'M');$pdf->Ln(2); // 换行}elseif ($key == 5 && $val['record']['data'] === ''){$content = '企业已满足1.近三年获得过省级科技奖励,并排名前三2.近三年获得国家级科技奖励,并在获奖单位中排名前五3.近两年研发费用总额均值在1000万元以上4.近两年新增股权融资总额(合格机构投资者实缴金额)达到6000万元以上4.近三年进入“创客中国”中小企业创新创业大赛全国500强企业#其中一项或多项,满足条件。';$contentHeight = $pdf->GetStringHeight($tWidth + 130,$content);$rowHeight = max(10, $contentHeight); // 行高度,取标题和内容高度的最大值$pdf->Cell(25, $contentHeight, '【大师兄点评】', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',0);$pdf->SetTextColor(144, 144, 144);$pdf->MultiCell($tWidth + 135, $rowHeight, $content, ['TRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 1,'', '', true, 0, false, true, $rowHeight, 'M');}else{$content = \app\admin\model\question\Tips::where(['group_id' => $val['standard_group'],'result_value' => $val['record']['result_value']])->value('content');$contentHeight = $pdf->GetStringHeight($tWidth + 130,$content);$rowHeight = max(10, $contentHeight); // 行高度,取标题和内容高度的最大值$pdf->Cell(25, $rowHeight, '【大师兄点评】', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',0);$pdf->SetTextColor(144, 144, 144);$pdf->MultiCell($tWidth + 135, $rowHeight, $content, ['TRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 1,'', '', true, 0, false, true, $rowHeight, 'M');$pdf->Ln(2); // 换行}}}//=======================维度评测分数分析=======================================$pdf->SetFillColor($titleBackgroundColor[0], $titleBackgroundColor[1], $titleBackgroundColor[2]);// 设置文字颜色$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);// 设置字体和字号$pdf->SetFont($titleFont, 'B', $titleFontSize);// 绘制带有背景颜色的矩形作为标题$pdf->Rect($pdf->GetX(), $pdf->GetY()+4, $titleWidth, $titleHeight, 'F');// 在标题矩形内居中显示标题文本$titleText = '维度评测分数分析';$pdf->Text($pdf->GetX()+2, $pdf->GetY()+7, $titleText);//专业化$zScore = Question::with(['record'])->where(['gp_id' => 2, 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->sum('record.result_value');//精细化$jScore = Question::with(['record'])->where(['gp_id' => 3, 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->sum('record.result_value');//新颖化$xScore = Question::with(['record'])->where(['gp_id' => 4, 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->sum('record.result_value');//特色化$tScore = Question::with(['record'])->where(['gp_id' => 5, 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->sum('record.result_value');
//============================雷达图============================$pdf->Ln(); // 换行
// // =================创建雷达图$values = array($jScore,$zScore,$xScore,$tScore);$graph = $this->createRadarGraph($values);// 将雷达图输出到缓冲区ob_start();$graph->Stroke();$imgData = ob_get_clean();// 将雷达图插入 PDF$pdf->Image('@' . $imgData, $pdf->GetX()+42, $pdf->GetY()+16, 100, 100, '', '', 'C', false, 300, '', false, false, 0);
// -----------------------四维度分数----------------------------------$pdf->SetTextColor(0, 0, 0);$pdf->SetFont($titleFont, 'B', 14);$pdf->Text(95, $pdf->GetY()+10, '精细化');$pdf->SetFont($titleFont, '', 10);$pdf->Text(95, $pdf->GetY()+10, '评分:');$pdf->SetTextColor(239, 56, 34);$pdf->Text(106, $pdf->GetY(), $jScore);$pdf->SetTextColor(0, 0, 0);$pdf->SetFont($titleFont, 'B', 14);$pdf->Text(45, $pdf->GetY()+38, '专业化');$pdf->SetFont($titleFont, '', 10);$pdf->Text(45, $pdf->GetY()+11, '评分:');$pdf->SetTextColor(239, 56, 34);$pdf->Text(56, $pdf->GetY(), $zScore);$pdf->SetTextColor(0, 0, 0);$pdf->SetFont($titleFont, 'B', 14);$pdf->Text(145, $pdf->GetY()-11, '特色化');$pdf->SetFont($titleFont, '', 10);$pdf->Text(145, $pdf->GetY()+10, '评分:');$pdf->SetTextColor(239, 56, 34);$pdf->Text(156, $pdf->GetY(), $tScore);$pdf->SetTextColor(0, 0, 0);$pdf->SetFont($titleFont, 'B', 14);$pdf->Text(95, $pdf->GetY()+40, '新颖化');$pdf->SetFont($titleFont, '', 10);$pdf->Text(95, $pdf->GetY()+10, '评分:');$pdf->SetTextColor(239, 56, 34);$pdf->Text(106, $pdf->GetY(), $xScore);//================$pdf->Ln(); // 换行$pdf->SetFillColor(237, 237, 237);$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 12);// 绘制带有背景颜色的矩形作为标题$pdf->Rect($pdf->GetX(), $pdf->GetY()+4, $titleWidth, 20, 'F');// 在标题矩形内居中显示标题文本$titleText = '当前企业维度评分为';$pdf->Text(45, $pdf->GetY()+8, $titleText);$pdf->SetTextColor(239, 56, 34);$pdf->SetFont($titleFont, '', 18);$titleText = $zScore + $tScore + $xScore + $jScore;$pdf->Text(84, $pdf->GetY()-2, $titleText);$pdf->SetTextColor(0,0,0);$pdf->SetFont($titleFont, '', 12);$titleText = '分,评分高代表该维度指标最强,';$pdf->Text(93, $pdf->GetY()+2, $titleText);$titleText = '评分低代表该指标有待提高,详细分析见下方。';$pdf->Text(55, $pdf->GetY()+8, $titleText);$pdf->Ln(); // 换行//=========================各维度$pdf->AddPage(); // 换页$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12); // 换行$data = Question::with(['record'])
// ->where(['gp_id' => ['in','2,3,4,5'], 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->where(['gp_id' => ['in','2,3,4,5'], 'pid' => $row['record_id'], 'state' => 0, 'record.test_log_id' => $row['id']])->order('sort','asc')->select();
// return json_encode($data);
//1综合指标,2专业化,3精细化,4创新力,5特色化$wei = [0 => ['name'=>'专业化','score' => 25,'gScore' => $zScore],4 => ['name'=>'精细化','score' => 25,'gScore' => $jScore],8 => ['name'=>'新颖化','score' => 35,'gScore' => $xScore],12 => ['name'=>'特色化','score' => 15,'gScore' => $tScore],];//==========$lastKey = count($data)-1;foreach ($data as $key => $val){// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(8); // 换行}if($key == 0 || $key == 4 || $key == 8 || $key == 12){$pdf->Ln(2); // 换行$pdf->SetFillColor(95, 183, 255);$pdf->SetFont($titleFont, '', 12);$pdf->SetTextColor($titleTextColor[0], $titleTextColor[1], $titleTextColor[2]);$pdf->Rect($pdf->GetX(), $pdf->GetY(), $titleWidth, $titleHeight-2, 'F');$pdf->Text($pdf->GetX()+4, $pdf->GetY()+4, $wei[$key]['name']);
// $pdf->SetY($pdf->GetY()+4);
// $pdf->Ln(); // 换行//=========得分框======// 设置边框颜色和填充颜色$pdf->SetDrawColor(148, 172, 250); // 边框颜色$pdf->SetFillColor(255,255,255);// 绘制圆角长方体的框$width = 50; // 框的宽度$height = 30; // 框的高度$pdf->RoundedRect(10, $pdf->GetY()+10, $width, $height, 2, '1111', 'DF');
// $pdf->SetY($pdf->GetY()+$height+8);//得分$pdf->SetFont($titleFont, 'B', 32);$pdf->SetTextColor(0,0,0);if($wei[$key]['gScore']<=9){$pdf->Text(30, $pdf->GetY()+15, $wei[$key]['gScore']);}else{$pdf->Text(28, $pdf->GetY()+15, $wei[$key]['gScore']);}//满分$pdf->SetFont($titleFont, 'B', 12);$pdf->SetTextColor(118, 118, 119);$pdf->Text(24, $pdf->GetY()+15, '满分 '.$wei[$key]['score'] . ' 分');
//=========得分条======// 设置底部进度条的位置和尺寸$progressX = 80;$progressY = $pdf->GetY()-5;$progressWidth = 100;$progressHeight = 8;$cornerRadius = 2; // 圆角半径// 设置进度条颜色$progressColor = [71, 136, 255]; // 蓝色// 设置进度百分比(0-100)$progressPercentage = $wei[$key]['gScore'] / $wei[$key]['score'] * 100;// 计算实际进度条的宽度$actualProgressWidth = $progressWidth * ($progressPercentage / 100);// 绘制底部进度条背景(灰色部分)$pdf->SetFillColor(200, 200, 200); // 灰色$pdf->RoundedRect($progressX, $progressY, $progressWidth, $progressHeight, $cornerRadius, '1111', 'DF');// 绘制实际进度// 定义渐变颜色
// $startColor = [173, 205, 255]; // 浅蓝色
// $endColor = [71, 136, 255]; // 深蓝色// 创建线性渐变
// $gradient = $pdf->LinearGradient($progressX, $progressY, $actualProgressWidth, $progressHeight, $startColor, $endColor);
// $pdf->SetFillColor($gradient);
// $pdf->SetFillColor($progressColor);if($wei[$key]['gScore'] != 0){$pdf->RoundedRect($progressX, $progressY, $actualProgressWidth, $progressHeight, $cornerRadius, '1111', 'DF','',$progressColor);}// 在进度条内显示数值$textX = $progressX + $actualProgressWidth - 8; // 设置文本位置的 x 坐标$textY = $progressY + $progressHeight / 2 - 14; // 设置文本位置的 y 坐标$pdf->SetFont($titleFont, '', 16);$pdf->SetTextColor(240, 74, 54);$pdf->Text($textX, $textY, $wei[$key]['gScore'] . ' 分');//进度条两边分数$pdf->SetFont($titleFont, '', 12);$pdf->SetTextColor(164, 164, 164);$pdf->Text($progressX - 12, $progressY+2, '0 分');$pdf->Text($progressX+103, $progressY+2, $wei[$key]['score'] . ' 分');$pdf->Ln(14); // 换行}//========建议===$pdf->Ln(4); // 换行$pdf->SetFillColor(233, 233, 233); // 淡灰色背景$pdf->Cell(5, 10, '', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',1);$pdf->SetFont($titleFont, '', 10);$pdf->SetTextColor(0, 0, 0);$pdf->Cell($titleWidth-25, 10, $val['name'], ['LTRB' => ['width' => 0.1, 'color' => [233, 233, 233]]], 0, 'L', 1);$pdf->Cell(20, 10, '得分:'.intval($val['record']['result_value']).'分', ['LTRB' => ['width' => 0.1, 'color' => [233, 233, 233]]], 1, 'L', 1);// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12); // 换行}$contentHeight = $pdf->GetStringHeight($tWidth + 130,$val['option_answer']);$rowHeight = max(10, $contentHeight); // 行高度,取标题和内容高度的最大值$pdf->SetTextColor(106, 192, 112);$pdf->SetFont($titleFont, '', 10);$pdf->Cell(2, $rowHeight, '', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',0);$pdf->MultiCell($tWidth + 138, $rowHeight, '满分指标:'.$val['option_answer'], ['TB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 0,'', '', true, 0, false, true, $rowHeight, 'M');$pdf->Cell(20, $rowHeight, '满分:'.$val['option_score'].'分', ['TRB' => ['width' => 0.1, 'color' => [233, 233, 233]]],1,'L',0);// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12); // 换行}
//=============特色化建议区分===if($val['gp_id'] == 5 && $key == $lastKey){
// echo $key.'==='.count($data);die;if($tScore <= 4){$result_value = 4;}elseif($tScore > 4 && $tScore <= 10){$result_value = 10;}elseif($tScore > 10 && $tScore <= 15){$result_value = 15;}$content = \app\admin\model\question\Tips::where(['group_id' => 'GP_5','result_value' => $result_value])->value('content');$contentHeight = $pdf->GetStringHeight($tWidth + 130,$content);$rowHeight = max(10, $contentHeight); // 行高度,取标题和内容高度的最大值$pdf->SetTextColor(0, 140, 255);$pdf->Cell(25, $rowHeight, '【大师兄建议】', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',0);$pdf->SetTextColor(144, 144, 144);$pdf->MultiCell($tWidth + 135, $rowHeight, $content, ['TRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 1,'', '', true, 0, false, true, $rowHeight, 'M');}elseif($val['gp_id'] != 5){$content = \app\admin\model\question\Tips::where(['group_id' => $val['standard_group'],'result_value' => $val['record']['result_value']])->value('content');$contentHeight = $pdf->GetStringHeight($tWidth + 130,$content);$rowHeight = max(10, $contentHeight); // 行高度,取标题和内容高度的最大值$pdf->SetTextColor(0, 140, 255);$pdf->Cell(25, $rowHeight, '【大师兄建议】', ['LTB' => ['width' => 0.1, 'color' => [233, 233, 233]]],0,'L',0);$pdf->SetTextColor(144, 144, 144);$pdf->MultiCell($tWidth + 135, $rowHeight, $content, ['TRB' => ['width' => 0.1, 'color' => array(233, 233, 233)]], 'L', 0, 1,'', '', true, 0, false, true, $rowHeight, 'M');}}$pdf->Ln(17); // 换行// 检查是否需要换页if ($pdf->GetY() + 30 > $pdf->getPageHeight()) {$pdf->AddPage(); // 换页 // 添加页眉图片$pdf->Image($headerImgPath, 0, 0, $pageWidth, $headerImgHeight, '', '', '', false, 300, '', false, false, 0);// 添加页脚图片$pdf->Image($footerImgPath, 0, 267, $pageWidth, $footerImgHeight, '', '', '', false, 300, '', false, false, 0);$pdf->SetFont($titleFont, '', 8);$pdf->SetTextColor(144, 144, 144);$pdf->Text($pdf->GetX()+8, $pdf->GetY()+2, $qy_data['Name']);$pdf->Ln(12); // 换行}$pdf->SetTextColor(125, 125, 125);$content = '更详尽的专精特新企业分析报告,请联系平台客服400-123-123,或直接进入《专精特新专区》在线咨询,上千专家在线为您解读报告!';$pdf->MultiCell(145, 30, $content, 0, 'L');$imgPath = 'https://***********.png';$pdf->Image($imgPath, 170, $pdf->GetY()-40, 30, 30, '', '', 'C', false, 300, '', false, false, 0);//Close and output PDF document$file = ROOT_PATH.'/public/uploads/'. $qy_data['report_number'] .'.pdf';$pdf->Output($file, 'FI');
上几个效果图
相关文章:

TCPDF生成PDF文件,含jpjraph生成雷达图
TCPDF生成PDF文件,含jpjraph生成雷达图 依赖自行安装 "tecnickcom/tcpdf": "^6.6","amenadiel/jpgraph": "4"雷达图生成 中文字体添加安装 没有封装,只作为测试案例展示 // 创建新的PDF文档$pdf new \TCPD…...

Flink-串讲面试题
1. 概念 有状态的流式计算框架 可以处理源源不断的实时数据,数据以event为单位,就是一条数据。 2. 开发流程 先获取执行环境env,然后添加source数据源,转换成datastream,然后使用各种算子进行计算,使用s…...

如何培养对技术的热爱
这篇博文主要针对计算机专业相关的同学,对于理工科专业的同学有一定的借鉴意义,对于其他专业的同学,还请自行取舍。 背景 初学计算机,可能并不是每个人都能对其产生兴趣,更不要说从其中获得快乐。对于如何培养兴趣&a…...
Vue响应式数据的原理
在 vue2 的响应式中,存在着添加属性、删除属性、以及通过下标修改数组,但页面不会自动更新的问题。而这些问题在 vue3 中都得以解决。 vue3 采用了 proxy 代理,用于拦截对象中任意属性的变化,包括:属性的读写、属性的…...

pytest fixture 用于teardown工作
fixture通过scope参数控制setup级别,setup作为用例之前前的操作,用例执行完之后那肯定也有teardown操作。这里用到fixture的teardown操作并不是独立的函数,用yield关键字呼唤teardown操作。 举个例子: 输出: 说明&…...

39 printf 的输出到设备层的调试
前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度 然后内核这边 只是到了 write 的系统调用, 并未向下细看 我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例…...
数字普惠金融、数字创新与经济增长—基于省级面板数据的实证考察(2011-2021年)
参照陈啸(2023)的做法,本对来自经济问题《数字普惠金融、数字创新与经济增长——基于省级面板数据的实证考察》一文中的基准回归部分进行复刻。数字普惠金融、数字创新已经成为驱动经济高质量发展的关键。利用省级面板数据,构建固…...
控制renderQueue解决NGUI与Unity3D物体渲染顺序问题
NGUI与Unity3D物体渲染顺序问题,做过UI的各位应该都遇到过。主要指的是UI与Unity制作的特效、3D人物等一同显示时的层次问题。 由于UI与特效等都是以transparent方式渲染,而Unity与NGUI在管理同是透明物体的render queue时实际上互相没有感知࿰…...

概率论与数理统计:第二、三章:一维~n维随机变量及其分布
文章目录 Ch2. 一维随机变量及其分布1.一维随机变量1.随机变量2.分布函数 F ( x ) F(x) F(x)(1)定义(2)分布函数的性质 (充要条件)(3)分布函数的应用——求概率3.最大最小值函数 2.一维离散型随机变量及其概率分布(分布律)3.一维连续型随机变量及其概率分布(概率密度)4.一般类型…...
BOLT- 识别和优化热门的基本块
在BOLT中,识别和优化热门的基本块之所以关键,是因为BOLT的主要目标是优化程序以更好地利用硬件特性,特别是指令缓存(ICache)。以下是BOLT如何识别和优化热门基本块的流程: 收集性能数据: BOLT开始的时候并不…...
Golang 中的 time 包详解(四):函数详解
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包,本文讲解一下 time 包中的函数。 func Now() Time 返回当前的系统时间。 package mai…...

【前端 | CSS】5种经典布局
页面布局是样式开发的第一步,也是 CSS 最重要的功能之一。 常用的页面布局,其实就那么几个。下面我会介绍5个经典布局,只要掌握了它们,就能应对绝大多数常规页面。 这几个布局都是自适应的,自动适配桌面设备和移动设备…...
腾讯云宣布VPC网络架构重磅升级,可毫秒级感知网络故障并实现自愈
8月11日,腾讯云宣布VPC(Virtual Private Cloud,云私有网络)架构重磅升级。新架构采用多项腾讯核心自研技术,能够支撑用户构建业界最大 300万节点超大规模单VPC网络,并将转发性能最大提升至业界领先的200Gbp…...

vue 路由页面跳转
从index.vue跳转到data.vue index.vue <el-table-column label"客户数" align"center" :show-overflow-tooltip"true"><template slot-scope"scope"><router-link :to"/system/enterprise-data/index/ scope.ro…...
Vue toRefs:在Vue中不失去响应式的情况下解构属性
Vue toRefs:在Vue中不失去响应式的情况下解构属性 文章目录 Vue toRefs:在Vue中不失去响应式的情况下解构属性什么是响应式?解构Props的挑战使用toRefs保持响应式结论 在Vue开发中,我们经常会在组件之间传递数据。这时候ÿ…...

自定义element-plus的弹框样式
项目中弹框使用频繁,需要统一样式风格,此组件可以自定义弹框的头部样式和内容 一、文件结构如下: 二、自定义myDialog组件 需求: 1.自定义弹框头部背景样式和文字 2.自定义弹框内容 3.基本业务流程框架 components/myDialog/index.vue完整代码: &…...

Linux:iptables防火墙
目录 绪论 1、防火墙 1.1 保护范围 1.2 网络协议划分 1.3 协议:tcp 1.4 四表 1.5 五链 1.6 iptables的规则 1.7 匹配顺序 流入本机:prerouting ------->iuput---------->用户进程(httpd服务)------请求--------响应--------->数据要返…...
MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoTemplate完成增删改查
传送门: MongoDB文档--基本概念_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装(mongodb环境搭建)-docker安装(挂载数据卷)-以及详细版本对比_一单成的博客-CSDN博客 MongoDB文档--基本安装-linux安装&…...
设计模式十四:责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求。 在责任链模式中,多个处理者对象被连接成一个链。当接收到一个请求时…...
将商城项目放到docker-centos7中
1、docker pull centos:7 2、docker run -d -it --privileged 仓库名称/shopcentos:1.1 /usr/sbin/init 注意: /usr/sbin/init 必须加,否则没法使用systemctl启动mysql 3、安装mysql教程 安装msyql教程:https://blog.csdn.net/davice_li…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...

EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...

Qt的学习(二)
1. 创建Hello Word 两种方式,实现helloworld: 1.通过图形化的方式,在界面上创建出一个控件,显示helloworld 2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world; …...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...