Rechnungen (PDF) mit nicht-lateinischen Buchstaben?

Hallo zusammen,

mit Eurer Hilfe bin ich vor Kurzem das chinesische Frontend angegangen.
Nun stehe ich vor einer neuen Hürde, die sich auf die Erzeugung von PDFs aus dem Admin-Tool heraus bezieht.
Erzeuge ich eine Rechnung aus einem Bestelldatensatz heraus, der chinesische Zeichen enthält (beispielsweise in den Feldern Name und Vorname), so enthält das PDF anstelle der chinesischen Zeichen nur Kästen.
Versuche ich eine Rechnungserstellung im Oxid Demo Shop, so schlägt bereits die Erstellung des PDFs fehl (erstellte Datei lässt sich dort nicht öffnen).

Ich vermute, es liegt wieder an der UTF-8 Konfiguration.
Aber wo kann ich konfigurieren, welchen Zeichensatz das Oxid-PDF-Rechnungserstellungs-Modul verwenden soll?

Danke für “sachdienliche Hinweise” :wink:

Gruß,
Matthias

Hallo Matthias,

das sollte eigentlich in neueren Shopversionen gefixt sein:
https://bugs.oxid-esales.com/view.php?id=2354

Gruß

Ich habe das gleiche Problem, dass chinesische Zeichen in Rechnungen und Lieferscheinen durch Kästchen ersetzt werden (CE 4.9.6). Weiß jemand woran das liegt, bzw. wie ich das fixen kann?:confused:

läuft der Shop im UTF-8 Modus?

Gute Frage. Soweit ich weiß wurde bei der Installation UTF-8 ausgewählt und Service -> Systemgesundheit -> PHP Konfiguration sagt: UTF-8 Unterstützung (grün markiert).

Und auch in der config.inc.php steht:
// UTF-8 mode in shop 0 - off, 1 - on
$this->iUtfMode = 1;

Ich habe aber auch schon den Fall gehabt, dass ein Digidesk-Modul neue Tabellen als latin1 angelegt hat, weil dies laut Aussage von dd die Std.-Einstellung gewesen wäre.

Ich bin daher unsicher.

öffne mal modules/oe/invoicepdf/models/invoicepdfblock.php
und ersetze in der Zeile ~41 ‘Arial’ durch ‘kozminproregular’

Wenn der Text zu klein ist, müsstest du noch in core/oxpdf.php ganz am Ende

parent::SetFont($family, $style, $size, $fontfile);

durch

parent::SetFont($family, $style, $size*1.2, $fontfile);

ersetzen

ist nicht sauber, aber wird funktionieren bis eine Lösung von der offiziellen Seite kommt

Super vielen Dank! Die Zeichen werden jetzt angezeigt, aber kannst du mir auch sagen woran das liegt? In der Arial sollten die Schriftzeichen doch eigentlich auch alle enthalten sein, oder?

Arial hats eigentlich, nur OXID wäre nicht OXID, wenn es auch tatsächlich Arial nehmen würde.

Denn obwohl dort “Arial” steht und es nur logisch wäre, dass Arial auch tatsächlich genommen wird, nimmt OXID im UTF-8 Modus “freesans” statt Arial, welches keine chinesischen Zeichen mehr hat. Siehe Ende der oxPdf.php


public function SetFont($family, $style = '', $size = 0, $fontfile = '')
{
    if ($family == 'Arial') {
        // overriding standard ..
       $family = oxRegistry::getConfig()->isUtf() ? 'freesans' : '';
    }
    parent::SetFont($family, $style, $size, $fontfile);
}

diese Zeile oxRegistry::getConfig()->isUtf() ? ‘freesans’ : ‘’; überschreibt Arial mit freesans.
Keine Ahnung, warum. Theoretisch könnte man es auch einfach auskommentieren, aber im TCPDF Forum wurde empfohlen diese andere, oben erwähnte Schriftart zu nehmen, weil sie definitiv alle Chinesischen, Koreanischen und Japanischen Zeichen enthält.

Das Problem liegt an Freesans. Der schreibt er nimmt Arial, aber nimm in Wirklichkeit Freesans als Schrift. Problem: Freesans hat keine Zeichen.