@php
$bgUrl = $bgFileExists
? asset('assets/images/certificate/' . $bgFilename)
: (function(){ $d=public_path('assets/images/certificate/background/default'); $fs=glob($d.'/*.{png,jpg,jpeg,gif,webp}', GLOB_BRACE); return ($fs && count($fs)>0) ? asset('assets/images/certificate/background/default/'.basename($fs[0])) : null; })();
@endphp
@if($bgBase64)
@php
$titleFont = data_get($titleStyle, 'font');
if (empty($titleFont) || $titleFont === 'undefined') { $titleFont = 'DejaVu Sans'; }
@endphp
@if(data_get($titleStyle, 'visible', true))
@php
$titleTop = (int) round((float) data_get($titleStyle, 'top', 20) * $scaleY);
$titleLeft = (int) round((float) data_get($titleStyle, 'marginLeft', data_get($titleStyle, 'left', 0)) * $scaleX);
@endphp
{{ str_replace(["\r\n","\n"], ' ', ($activity->name ?? 'Sertifikat PESERTA')) }}
@endif
@if(data_get($certificateSetting, 'name.visible', true))
@php
$nameFont = data_get($certificateSetting, 'name.font');
if (empty($nameFont) || $nameFont === 'undefined') { $nameFont = 'DejaVu Sans'; }
$nameAlignRaw = strtolower((string) data_get($certificateSetting, 'name.align', 'center'));
$nameAlignCss = in_array($nameAlignRaw, ['kiri','left']) ? 'left' : (in_array($nameAlignRaw, ['kanan','right']) ? 'right' : 'center');
// Use exact values from database - match the exact precision shown in debug
$nameTopRaw = (float) data_get($certificateSetting, 'name.top', 190);
$nameLeftRaw = (float) data_get($certificateSetting, 'name.left', 30);
$nameWidthRaw = (float) data_get($certificateSetting, 'name.width', 180);
// Apply scaling exactly like print_certificates_html.blade.php
// Calculate with full precision first, then round for display
$nameTopCalculated = $nameTopRaw * $scaleY;
$nameLeftCalculated = $nameLeftRaw * $scaleX;
$nameWidthCalculated = $nameWidthRaw * $scaleX;
// Round to match print behavior (print uses int round)
$nameTop = (int) round($nameTopCalculated);
$nameLeft = (int) round($nameLeftCalculated);
$nameWidth = (int) round($nameWidthCalculated);
@endphp
{{ optional(optional($peserta)->user)->name ?? '-' }}
@endif
@if(data_get($certificateSetting, 'email.visible', true))
@php
$emailFont = data_get($certificateSetting, 'email.font');
if (empty($emailFont) || $emailFont === 'undefined') { $emailFont = 'DejaVu Sans'; }
@endphp
@php
$emailTop = (int) round((float) data_get($certificateSetting, 'email.top', 220) * $scaleY);
$emailLeft = (int) round((float) data_get($certificateSetting, 'email.left', 30) * $scaleX);
$emailWidth = (int) round((float) data_get($certificateSetting, 'email.width', 180) * $scaleX);
@endphp
{{ optional(optional($peserta)->user)->email ?? '-' }}
@endif
@if(data_get($certificateSetting, 'no_hp.visible', false))
{{ optional($profileParticipant)->no_hp ?? '-' }}
@endif
@if(data_get($certificateSetting, 'jenis_kelamin.visible', false))
@php
$genderTop = (int) round((float) data_get($certificateSetting, 'jenis_kelamin.top', 260) * $scaleY);
$genderLeft = (int) round((float) data_get($certificateSetting, 'jenis_kelamin.left', 30) * $scaleX);
$genderWidth = (int) round((float) data_get($certificateSetting, 'jenis_kelamin.width', 180) * $scaleX);
@endphp
{{ optional($profileParticipant)->jenis_kelamin ?? '-' }}
@endif
@if(data_get($certificateSetting, 'pekerjaan.visible', false))
@php
$jobTop = (int) round((float) data_get($certificateSetting, 'pekerjaan.top', 280) * $scaleY);
$jobLeft = (int) round((float) data_get($certificateSetting, 'pekerjaan.left', 30) * $scaleX);
$jobWidth = (int) round((float) data_get($certificateSetting, 'pekerjaan.width', 180) * $scaleX);
@endphp
{{ optional($profileParticipant)->pekerjaan ?? '-' }}
@endif
@if(data_get($certificateSetting, 'instansi.visible', false))
@php
$instTop = (int) round((float) data_get($certificateSetting, 'instansi.top', 290) * $scaleY);
$instLeft = (int) round((float) data_get($certificateSetting, 'instansi.left', 30) * $scaleX);
$instWidth = (int) round((float) data_get($certificateSetting, 'instansi.width', 180) * $scaleX);
@endphp
{{ optional($profileParticipant)->instansi ?? '-' }}
@endif
@if(data_get($certificateSetting, 'jabatan.visible', false))
@php
$roleTop = (int) round((float) data_get($certificateSetting, 'jabatan.top', 300) * $scaleY);
$roleLeft = (int) round((float) data_get($certificateSetting, 'jabatan.left', 30) * $scaleX);
$roleWidth = (int) round((float) data_get($certificateSetting, 'jabatan.width', 180) * $scaleX);
@endphp
{{ optional($profileParticipant)->jabatan ?? '-' }}
@endif
@if(data_get($certificateSetting, 'alamat.visible', false))
@php
$addrTop = (int) round((float) data_get($certificateSetting, 'alamat.top', 320) * $scaleY);
$addrLeft = (int) round((float) data_get($certificateSetting, 'alamat.left', 30) * $scaleX);
$addrWidth = (int) round((float) data_get($certificateSetting, 'alamat.width', 180) * $scaleX);
@endphp
{{ optional($profileParticipant)->alamat ?? '-' }}
@endif
@if(data_get($certificateSetting, 'province.visible', false))
@php
$provFont = data_get($certificateSetting, 'province.font');
if (empty($provFont) || $provFont === 'undefined') { $provFont = 'DejaVu Sans'; }
$provTop = (int) round((float) data_get($certificateSetting, 'province.top', 340) * $scaleY);
$provLeft = (int) round((float) data_get($certificateSetting, 'province.left', 30) * $scaleX);
$provWidth = (int) round((float) data_get($certificateSetting, 'province.width', 180) * $scaleX);
@endphp
{{ $provinceParticipant ?? '-' }}
@endif
@if(data_get($certificateSetting, 'regency.visible', false))
@php
$regFont = data_get($certificateSetting, 'regency.font');
if (empty($regFont) || $regFont === 'undefined') { $regFont = 'DejaVu Sans'; }
$regTop = (int) round((float) data_get($certificateSetting, 'regency.top', 360) * $scaleY);
$regLeft = (int) round((float) data_get($certificateSetting, 'regency.left', 30) * $scaleX);
$regWidth = (int) round((float) data_get($certificateSetting, 'regency.width', 180) * $scaleX);
@endphp
{{ $regencyParticipant ?? '-' }}
@endif
@if(data_get($certificateSetting, 'district.visible', false))
@php
$distFont = data_get($certificateSetting, 'district.font');
if (empty($distFont) || $distFont === 'undefined') { $distFont = 'DejaVu Sans'; }
$distTop = (int) round((float) data_get($certificateSetting, 'district.top', 380) * $scaleY);
$distLeft = (int) round((float) data_get($certificateSetting, 'district.left', 30) * $scaleX);
$distWidth = (int) round((float) data_get($certificateSetting, 'district.width', 180) * $scaleX);
@endphp
{{ $districtParticipant ?? '-' }}
@endif
@if(data_get($certificateSetting, 'certificate_id.visible', false))
@php
$certIdFont = data_get($certificateSetting, 'certificate_id.font');
if (empty($certIdFont) || $certIdFont === 'undefined') { $certIdFont = 'DejaVu Sans'; }
$certTop = (int) round((float) data_get($certificateSetting, 'certificate_id.top', 360) * $scaleY);
$certLeft = (int) round((float) data_get($certificateSetting, 'certificate_id.left', 30) * $scaleX);
$certWidth = (int) round((float) data_get($certificateSetting, 'certificate_id.width', 180) * $scaleX);
@endphp
{{ $peserta->certificate_id ?? '-' }}
@endif
@if(data_get($photoStyle, 'visible', true))
@if($photoBase64)
@endif
@endif
@if(data_get($qrStyle, 'visible', true))
@php
$qrVal = route('activity.verify-certificate', ['id' => $activity->id]) . '?certificate_id=' . urlencode((string) ($peserta->certificate_id ?? ''));
$qrSizeInt = (int) round($qrSize);
try {
$qrBinary = \SimpleSoftwareIO\QrCode\Facades\QrCode::format('png')->size(max($qrSizeInt,40))->generate((string) $qrVal);
$qrSrc = 'data:image/png;base64,'.base64_encode($qrBinary);
} catch (\Throwable $e) {
$qrSrc = 'https://api.qrserver.com/v1/create-qr-code/?size='.max($qrSizeInt,40).'x'.max($qrSizeInt,40).'&data='.urlencode((string) $qrVal);
}
@endphp
@endif