PDF: Unicode-Schriften und temporaere Dateien 20 Minuten statt Sekunden

- makepdf.php nutzt FreeSerif/FreeSans (bei TCPDF dabei) statt der
  eingebauten PDF-Schriften Times/Helvetica. Die kennen nur westeuropaeische
  Zeichen, Namen wie Dvorak mit Hacek oder Lukasz mit L-Strich wurden zu
  "?". Die Breiten weichen um hoechstens 0,8 % (Serif) bzw. 3 % (Sans) ab.
  Die Schriften stehen als Konstanten PDF_SCHRIFT_SERIF/-_SANS an einer
  Stelle. Die PDFs werden durch die eingebetteten Zeichen etwa 130 KB
  groesser.
- savePDF() und makeImageFromPDF() raeumten Dateien auf, die aelter als
  20 Sekunden waren; laut Kommentar waren Minuten gemeint. Oeffneten zwei
  Personen kurz nacheinander Dokumente, konnte das PDF der ersten weg sein,
  bevor ihr Browser es geladen hatte. Jetzt PDF_TEMP_MAX_ALTER = 20 Minuten.

Getestet: Rechnungs-PDF fuer alle drei Briefkoepfe mit Namen/Firma in
tschechischen und polnischen Zeichen, im Browser gerendert; Aufraeumen
mit 5, 19 und 25 Minuten alten Dateien.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 11:33:54 +02:00
co-authored by Claude Opus 5
parent 8fe43d6802
commit 3f7d070d7f
2 changed files with 100 additions and 87 deletions
+1
View File
@@ -106,6 +106,7 @@ SQL wird durchgehend per String-Verkettung gebaut. Escaping ist Handarbeit über
- **`smarty/` enthält Smarty 4.5.6** — der schlichte Verzeichnisname sagt nichts über die Version.
- **PHPMailer liegt in zwei Versionen parallel und beide sind aktiv:** `index.php` lädt `incs/PHPMailer_v6` für den Rechnungsversand, `sites/projectadd.php` dagegen `incs/PHPMailer_v5.1`. Keine der beiden ist entfernbar, ohne den jeweiligen Aufrufer umzustellen.
- **PDF-Schriften nur über `PDF_SCHRIFT_SERIF` / `PDF_SCHRIFT_SANS`** (oben in `incs/makepdf.php`, FreeSerif/FreeSans). Die eingebauten PDF-Schriften Times/Helvetica können nur westeuropäische Zeichen; aus ř, ł, č würde ein „?“.
- **`incs/font/` gehört zu pChart, nicht zu TCPDF.** Die TTFs dort werden von `stats.php` für die Diagramme geladen; TCPDF bringt seine Schriften in `incs/tcpdf/fonts/` selbst mit.
- **`index.php` setzt `error_reporting(E_ERROR | E_PARSE)`.** Warnungen und Notices sind unterdrückt, und der Code verlässt sich darauf — nicht ohne Not hochdrehen, sonst überflutet es die Ausgabe.
- **`templates_c/`, `ajax/templates_c/` und `temp/` müssen für den Webserver schreibbar sein.** Sie sind git-ignoriert und nur über `.gitkeep` im Repo vorhanden.