zeichenFuerGrundschrift function
Renders template with data and returns a complete PDF byte buffer.
Ersetzt Zeichen, die die eingebauten PDF-Schriften nicht darstellen koennen.
Helvetica, Times und Courier beherrschen nur Latin-1. Alles darueber hinaus erscheint im Ausdruck als leeres Kaestchen - im Tagesbericht traf es den Aufzaehlungspunkt und den Gedankenstrich, die aus jeder Textverarbeitung mitkommen.
Angewandt wird das NUR, wenn die Vorlage keine eigene Schrift mitbringt. Eine eingebettete TTF kann diese Zeichen darstellen, dort waere die Ersetzung eine Verschlechterung.
Implementation
String zeichenFuerGrundschrift(String text) {
if (text.isEmpty) return text;
const ersatz = {
'\u2022': '-', // Aufzaehlungspunkt
'\u25cf': '-', // gefuellter Kreis
'\u25aa': '-', // gefuelltes Quadrat
'\u2013': '-', // Halbgeviertstrich
'\u2014': '-', // Geviertstrich
'\u2018': "'", // einfache Anfuehrung
'\u2019': "'",
'\u201a': "'",
'\u201c': '"', // doppelte Anfuehrung
'\u201d': '"',
'\u201e': '"',
'\u2026': '...', // Auslassungspunkte
'\u00a0': ' ', // geschuetztes Leerzeichen
'\u2192': '->',
'\u2260': '!=',
'\u2264': '<=',
'\u2265': '>=',
};
var out = text;
ersatz.forEach((a, b) => out = out.replaceAll(a, b));
// Was danach immer noch ausserhalb von Latin-1 liegt, wuerde als Kaestchen
// erscheinen. Ein Fragezeichen ist haesslich, aber ehrlich - und man sieht,
// dass dort etwas fehlt.
final b = StringBuffer();
for (final r in out.runes) {
b.write(r <= 0xFF ? String.fromCharCode(r) : '?');
}
return b.toString();
}