SetCreator(PDF_CREATOR); $pdf->SetAuthor('TPU Survey System'); $pdf->SetTitle('เกียรติบัตร - ' . $name); $pdf->SetSubject('เกียรติบัตรผู้ผ่านการอบรม'); // Remove default header/footer $pdf->setPrintHeader(false); $pdf->setPrintFooter(false); // Set margins to 0 $pdf->SetMargins(0, 0, 0); $pdf->SetAutoPageBreak(false, 0); // Add page $pdf->AddPage(); // Background image path $imgFile = __DIR__ . '/../pic/AI Antigravity.png'; if (!empty($bgImage)) { $customImgFile = __DIR__ . '/../' . $bgImage; if (file_exists($customImgFile)) { $imgFile = $customImgFile; } } if (!file_exists($imgFile)) { throw new Exception("ไม่พบไฟล์เทมเพลตเกียรติบัตรที่: " . $imgFile); } // วาดภาพพื้นหลังให้พอดีกับกระดาษ A4 แนวนอน (297 x 210 มิลลิเมตร) $pdf->Image($imgFile, 0, 0, 297, 210, '', '', '', false, 300, '', false, false, 0); // เรียกใช้ฟอนต์ภาษาไทย Sarabun $fontRegular = 'sarabun'; $fontBold = 'sarabunb'; // กำหนดฟอนต์ชื่อ: หนา (Bold) ขนาด 26pt (สเกลย่อส่วนสำหรับ A4) $pdf->SetFont($fontBold, '', 26); $pdf->SetTextColor(30, 41, 59); // จัดวางชื่อกึ่งกลางหน้ากระดาษ (ความกว้าง A4 = 297 มม.) (และแก้ปัญหาสระลอย) $pdf->SetXY(0, $yPos); $pdf->Cell(297, 15, fixThaiVowels($name), 0, false, 'C', 0, '', 0, false, 'T', 'M'); // วาดรหัสตรวจสอบเกียรติบัตรที่กึ่งกลางล่างสุดของกระดาษ (ขนาด 8pt พิกัด Y = $codeY มม.) if (!empty($certCode)) { $pdf->SetFont($fontRegular, '', 8); $pdf->SetTextColor(100, 116, 139); // Muted Slate color $pdf->SetXY(0, $codeY); $pdf->Cell(297, 10, fixThaiVowels('รหัสตรวจสอบเกียรติบัตร: ' . $certCode), 0, false, 'C', 0, '', 0, false, 'T', 'M'); } // Output if (!empty($outputPath)) { $dir = dirname($outputPath); if (!is_dir($dir)) { mkdir($dir, 0777, true); } $pdf->Output($outputPath, 'F'); return $outputPath; } else { return $pdf->Output('', 'S'); } } /** * แก้ไขปัญหาสระลอยและวรรณยุกต์ซ้อนทับกันในไฟล์ PDF ภาษาไทย (สำหรับ TCPDF/FPDF) * โดยการใช้รหัส Unicode ในส่วน Private Use Area (PUA) ของฟอนต์ไทยมาตรฐาน * * @param string $text ข้อความภาษาไทยที่ต้องการจัดรูปแบบสระ/วรรณยุกต์ * @return string ข้อความที่จัดตำแหน่งสระ/วรรณยุกต์แล้ว */ function fixThaiVowels($text) { // TCPDF with the Sarabun font natively handles Thai vowel and tone mark positioning correctly. // The previous PUA mapping caused square box rendering issues. return $text; }