Hack-Font deaktiviert, fallback auf Helvetica [deploy]
All checks were successful
Deploy bericht / deploy (push) Successful in 1s

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 <b>/<i>-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.
This commit is contained in:
Eduard Wisch 2026-04-09 16:01:43 +02:00
parent 3ec303c48e
commit b9e204f81c

View file

@ -26,45 +26,12 @@ trait BerichtPdfTrait
$this->bericht_company = (string) $company; $this->bericht_company = (string) $company;
$this->bericht_logo = (string) $logo_path; $this->bericht_logo = (string) $logo_path;
// Hack-Font registrieren (Eddys Corporate-Font) // TODO: Hack-Font später mit vorab-konvertierten TCPDF-Definitionen
// Nur Regular registrieren. Alle 4 Hack-TTFs produzieren in TCPDF die // einbinden. TCPDF::addTTFfont zur Laufzeit funktioniert für Hack
// gleiche interne Family "hack" (PostScript-Name-Kollision) und // nicht (PostScript-Family-Kollision "hack" zwischen Regular/Bold/
// überschreiben sich gegenseitig — Bold/Italic sind darum nicht // Italic → hack.php überschreibt sich selbst, SetFont-Fallbacks
// sauber trennbar. Wir nutzen NUR Regular und ignorieren Styles // brechen HTML-Rendering ab). Bis dahin: Standard-Helvetica.
// komplett (Header-"Bold" wird über Schriftgröße emuliert). $this->hack_font_key = 'helvetica';
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 <b>/<i>-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);
} }
public function Header() public function Header()