Hack-Font deaktiviert, fallback auf Helvetica [deploy]
All checks were successful
Deploy bericht / deploy (push) Successful in 1s
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:
parent
3ec303c48e
commit
b9e204f81c
1 changed files with 6 additions and 39 deletions
|
|
@ -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 <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);
|
||||
// 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()
|
||||
|
|
|
|||
Loading…
Reference in a new issue