diff --git a/app/Common.php b/app/Common.php index 95f5544..4997cd0 100644 --- a/app/Common.php +++ b/app/Common.php @@ -13,3 +13,27 @@ * * @see: https://codeigniter.com/user_guide/extending/common.html */ + +if (! function_exists('mpdf_normalize_font_weight_css')) { + /** + * mPDF supports font-weight as `bold|normal` reliably. + * Convert numeric CSS weights (100..900) to mPDF-safe values. + */ + function mpdf_normalize_font_weight_css(string $html): string + { + if ($html === '') { + return ''; + } + + return (string) preg_replace_callback( + '/(font-weight\s*:\s*)([1-9]00)(\s*;?)/i', + static function (array $matches): string { + $weight = (int) ($matches[2] ?? 400); + $normalized = $weight >= 500 ? 'bold' : 'normal'; + + return (string) ($matches[1] ?? 'font-weight:') . $normalized . (string) ($matches[3] ?? ';'); + }, + $html + ); + } +} diff --git a/app/Controllers/Diagnosis.php b/app/Controllers/Diagnosis.php index c2f9351..8ae1111 100644 --- a/app/Controllers/Diagnosis.php +++ b/app/Controllers/Diagnosis.php @@ -1501,6 +1501,9 @@ class Diagnosis extends BaseController . $autoHeaderHtml . $autoFooterHtml, $tokens); $suffixHtml = $this->applyPdfTokens(trim((string) ($printSetting['mpdf_suffix_html'] ?? '')), $tokens); + $pdfHtml = mpdf_normalize_font_weight_css($pdfHtml); + $prefixHtml = mpdf_normalize_font_weight_css($prefixHtml); + $suffixHtml = mpdf_normalize_font_weight_css($suffixHtml); $marginTop = $this->cmToMm($printSetting['page_margin_top_cm'] ?? 1.2, 1.2); $marginBottom = $this->cmToMm($printSetting['page_margin_bottom_cm'] ?? 1.2, 1.2); @@ -1535,6 +1538,7 @@ class Diagnosis extends BaseController if (! $headerHasTags) { $plainHeader = $this->applyPdfTokens($rawHeaderHtml . $rawFirstPageHeaderHtml, $tokens); + $plainHeader = mpdf_normalize_font_weight_css($plainHeader); if ($plainHeader !== '') { $mpdf->SetHTMLHeader($plainHeader, 'O'); $mpdf->SetHTMLHeader($plainHeader, 'E'); @@ -1546,6 +1550,7 @@ class Diagnosis extends BaseController if ($plainFooter === '') { $plainFooter = $this->applyPdfTokens($rawLastPageFooterHtml, $tokens); } + $plainFooter = mpdf_normalize_font_weight_css($plainFooter); if ($plainFooter !== '') { $mpdf->SetHTMLFooter($plainFooter, 'O'); @@ -2447,6 +2452,9 @@ class Diagnosis extends BaseController . $autoHeaderHtml . $autoFooterHtml, $tokens); $suffixHtml = $this->applyPdfTokens(trim((string) ($printSetting['mpdf_suffix_html'] ?? '')), $tokens); + $pdfHtml = mpdf_normalize_font_weight_css($pdfHtml); + $prefixHtml = mpdf_normalize_font_weight_css($prefixHtml); + $suffixHtml = mpdf_normalize_font_weight_css($suffixHtml); $mpdfTempDir = WRITEPATH . 'cache' . DIRECTORY_SEPARATOR . 'mpdf'; if (! is_dir($mpdfTempDir)) { @@ -2477,6 +2485,7 @@ class Diagnosis extends BaseController if (! $headerHasTags) { $plainHeader = $this->applyPdfTokens($rawHeaderHtml . $rawFirstPageHeaderHtml, $tokens); + $plainHeader = mpdf_normalize_font_weight_css($plainHeader); if ($plainHeader !== '') { $mpdf->SetHTMLHeader($plainHeader, 'O'); $mpdf->SetHTMLHeader($plainHeader, 'E'); @@ -2488,6 +2497,7 @@ class Diagnosis extends BaseController if ($plainFooter === '') { $plainFooter = $this->applyPdfTokens($rawLastPageFooterHtml, $tokens); } + $plainFooter = mpdf_normalize_font_weight_css($plainFooter); if ($plainFooter !== '') { $mpdf->SetHTMLFooter($plainFooter, 'O'); diff --git a/app/Controllers/DoctorDocument.php b/app/Controllers/DoctorDocument.php index 3c68426..2a2a8c1 100644 --- a/app/Controllers/DoctorDocument.php +++ b/app/Controllers/DoctorDocument.php @@ -1335,6 +1335,7 @@ class DoctorDocument extends BaseController } $html = view('doctor_document/doc_letterhead_print', $data); + $html = mpdf_normalize_font_weight_css($html); try { $mpdf->WriteHTML($html, HTMLParserMode::DEFAULT_MODE); diff --git a/app/Controllers/Ipd_discharge.php b/app/Controllers/Ipd_discharge.php index a9ad931..ac292dc 100644 --- a/app/Controllers/Ipd_discharge.php +++ b/app/Controllers/Ipd_discharge.php @@ -6747,17 +6747,20 @@ class Ipd_discharge extends BaseController $this->applyDischargeTemplateTokens(trim((string) ($templateSettings['header_html'] ?? '')), $templateTokenVars), false ); + $headerHtml = mpdf_normalize_font_weight_css($headerHtml); } $footerHtml = $this->sanitizeDischargePdfHtml( $this->applyDischargeTemplateTokens(trim((string) ($templateSettings['footer_html'] ?? '')), $templateTokenVars), false ); + $footerHtml = mpdf_normalize_font_weight_css($footerHtml); if ($footerHtml === '') { $footerHtml = '