From b9e204f81cc548ee463dfec3a0c56284d74e1fee Mon Sep 17 00:00:00 2001 From: Eduard Wisch Date: Thu, 9 Apr 2026 16:01:43 +0200 Subject: [PATCH] Hack-Font deaktiviert, fallback auf Helvetica [deploy] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TCPDF::addTTFfont produziert bei allen 4 Hack-TTFs den gleichen Key 'hack' (PostScript-Family-Kollision) und erzeugt eine hack.php die sich selbst überschreibt. Der HTML-Parser löst bei /-Tags dann SetFont-Calls aus, die auf nicht-existente Style-Varianten fallen zurück und mit 'Could not include font definition file: hack' abbrechen — keine Menge an SetFont-Overrides fängt das zuverlässig ab. Lösung: hack_font_key = helvetica. PDF-Generation funktioniert garantiert. Hack wird später mit vorab-offline-konvertierten .php-Definitionen neu eingebunden. --- class/berichtpdf.class.php | 45 +++++--------------------------------- 1 file changed, 6 insertions(+), 39 deletions(-) diff --git a/class/berichtpdf.class.php b/class/berichtpdf.class.php index ebc26c3..e524183 100644 --- a/class/berichtpdf.class.php +++ b/class/berichtpdf.class.php @@ -26,45 +26,12 @@ trait BerichtPdfTrait $this->bericht_company = (string) $company; $this->bericht_logo = (string) $logo_path; - // Hack-Font registrieren (Eddys Corporate-Font) - // Nur Regular registrieren. Alle 4 Hack-TTFs produzieren in TCPDF die - // gleiche interne Family "hack" (PostScript-Name-Kollision) und - // überschreiben sich gegenseitig — Bold/Italic sind darum nicht - // sauber trennbar. Wir nutzen NUR Regular und ignorieren Styles - // komplett (Header-"Bold" wird über Schriftgröße emuliert). - if (class_exists('TCPDF_FONTS') && defined('DOL_DATA_ROOT')) { - $src = dirname(__DIR__).'/fonts/Hack-Regular.ttf'; - $outdir = DOL_DATA_ROOT.'/bericht/tcpdf_fonts/'; - if (!is_dir($outdir)) @mkdir($outdir, 0755, true); - if (file_exists($src) && is_dir($outdir) && is_writable($outdir)) { - try { - $k = TCPDF_FONTS::addTTFfont($src, 'TrueTypeUnicode', '', 32, $outdir); - $ffile = $outdir.$k.'.php'; - if ($k && file_exists($ffile)) { - $this->AddFont($k, '', $ffile); - $this->hack_font_key = $k; - } - } catch (Throwable $e) { - error_log('[BerichtPdf] Hack-Font fehlgeschlagen: '.$e->getMessage()); - } - } else { - error_log('[BerichtPdf] Hack-Font: src='.$src.' outdir='.$outdir.' schreibbar='.(is_writable($outdir)?'ja':'nein')); - } - } - } - - /** - * Erzwingt style='' wenn die Hack-Family angefordert wird. Verhindert - * "Could not include font definition file: hack" wenn TCPDFs HTML-Parser - * bei /-Tags einen Style-Font-Lookup versucht, für den wir keine - * separate Datei haben. - */ - public function SetFont($family, $style = '', $size = null, $fontfile = '', $subset = 'default', $out = true) - { - if (strtolower((string) $family) === strtolower((string) $this->hack_font_key) && $this->hack_font_key !== 'helvetica') { - return parent::SetFont($this->hack_font_key, '', $size, $fontfile, $subset, $out); - } - return parent::SetFont($family, $style, $size, $fontfile, $subset, $out); + // TODO: Hack-Font später mit vorab-konvertierten TCPDF-Definitionen + // einbinden. TCPDF::addTTFfont zur Laufzeit funktioniert für Hack + // nicht (PostScript-Family-Kollision "hack" zwischen Regular/Bold/ + // Italic → hack.php überschreibt sich selbst, SetFont-Fallbacks + // brechen HTML-Rendering ab). Bis dahin: Standard-Helvetica. + $this->hack_font_key = 'helvetica'; } public function Header()