QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen.

Alles rund um die Programmierung mit Qt
Antworten
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen.

Beitrag von harry_m »

Hallo miteinander.

Ich habe eine kleine "App" geschrieben, die PDF-Dokumente mit Chinesischen Zeichen erzeugen soll.
War einfach und ging schnell. Toll. Nur mit den Chinesischen Zeichen klappt es nicht: außer Fragezeichen ist nichts zu sehen.

Es wurde im QtCreator 2.5 unter Windows erzeugt. Und beim ersten Misserfolg war ich der Meinung, dass ich es schnell richten kann. Gesagt-getan: Unterstützung für Ostasiatische Sprachen installiert, eine Sprache mit chinesischem Zeichensatz definiert: jetzt muss es klappen... Dachte ich: Fragezeichen, soweit das Auge reicht.

Das seltsame dabei: die Strings (habe sie für den Testlauf vorerst direkt eingegeben) sind im Editor des QtCreators mit allen Zeichen richtig zu sehen. Sie wurden aus der Excel-Tabelle heraus kopiert, die der Übersetzer ausgefüllt hat.

den Text erzeuge ich mit

painter->drawText(*rt2, Qt::AlignLeft | Qt::AlignVCenter, QString("The start conditions for the brake test are not met. 抱闸测试的开始条件不满足"));

Ich habe mir die Aufgabe viel einfacher vorgestellt: wo doch in der Qt-Doku überall betont wird, QString wäre "Unicode pur".

Hätte jemand eine Idee?
Zuletzt geändert von harry_m am 27. Juni 2012 08:26, insgesamt 1-mal geändert.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen

Beitrag von Christian81 »

Und täglich grüßt das Murmeltier, z.B. hier: http://qtforum.de/forum/viewtopic.php?f ... t=linguist
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen

Beitrag von harry_m »

Sehr freundlich, danke.

Diesen Thread habe ich bereits gelesen. (Und ja, mich ausgiebig mit Hilfe der Suchfunktion beschäftigt: und dadurch viele andere Threads durchgesehen).

Sonderbar ist nur, dass ich hier die Lösung wohl doch übersehen habe. Vielleicht habe ich die berühmt-berüchtigte "Tomaten auf den Augen": mag sein. Aber ich weiß immer noch nicht, was ich falsch mache.

Sorry.

Du hast im zweiten Beitrag geschrieben:

"...Das korrekte Vorgehen ist mittels QObject::tr() und ts-Dateien. Im Sourcecode nur ASCII (bzw. Englisch) und den Rest mittels Übersetzungen korrigieren. Dann funktioniert es auf alle Fälle..."

Das "QObject::tr()" und ts-Dateien sind für mich KEINE Lösung: denn ich brauche die Texte nicht für die Darstellung auf der Oberfläche, sondern ich muss die in eine PDF-Datei drucken. Die Chinesischen Texte sind bereits vom Übersetzer geschrieben: diese werde ich in eine XML- oder eine Textdatei exportieren. Mein Programm wird diese danach einlesen und daraus das besagte PDF-Dokument erzeugen. Also nix "QObject::tr()".
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen

Beitrag von franzf »

Es ging in dem Thread darum, dass die Zeichen im Quellcode standen, und da funkt halt der Compiler noch dazwischen.
Wenn du deinen Text in einer UTF-kodierten Datei speicherst, kannst du diesen natürlich korrekt zur Laufzeit laden - wäre das nicht möglich, ginge auch das mit den ts-Dateien nicht...
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen

Beitrag von harry_m »

So weit war ich auch schon.

Dazu fand ich auch was:

http://www.qtcentre.org/threads/34292-C ... ay-chinese
- dort wurde auch auf diese Seite verwiesen:

http://hi.baidu.com/cyclone/blog/ite...d6538dbf1.html

Aber eine Lösung habe ich daraus doch nicht basteln können. Weder die eine noch die andere "setCodecForStrings" Methode hat mir geholfen. (Vorausgesetzt, ich habe sie richtig verwendet: sie wurden VOR der ersten "QFont"-Definition gesetzt.):
QTextCodec :: setCodecForCStrings (QTextCodec :: codecForName ("GBK"));
QTextCodec :: setCodecForCStrings (QTextCodec :: codecForName ("UTF-8"));

Vielleicht ist es wirklich besser, die Daten erst aus einer Datei zu lesen und dann unter Umgehung des Compilers direkt zum QPainter zu schicken.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QPainter, PDF-Dokument mit Chinesischen Zeichen erzeugen

Beitrag von harry_m »

So, Freunde des gepflegten Programmierens.

Meine Aufgabe ist inzwischen erledigt und ich will die Ergebnisse in einem zusammenhängenden Beitrag zusammenfassen: so, dass die Grüße vom Murmeltier zumindest in diesem Fall nicht mehr nötig sind.

Wie im Eingangspost beschrieben, musste ich eine "App" schreiben, die aus einer XML-Datei mit Englisch-Chinesischen Texten ein PDF-Dokument erzeugt.
Mein Fehler bestand von Anfang an darin, dass ich das Lesen der Daten aus der XML-Datei hinten angestellt habe und versuchte eine kleine PDF-Datei soz. "zu Fuß" aus dem Quelltext zusammenzusetzen. Der "Übeltäter", der mir hier eben übel mitgespielt hat, war der Qt Creator. Denn er zeigte die über die Zwischenablage in den Quelltext herein kopierten Texte vorerst anstandslos an. Dass die in dieser Form nicht im "QPainter" ankommen, musste ich eben lernen.

Erst nachdem ich den entsprechenden DOM-Parser geschrieben habe und von dort aus den QPainter auf das PDF-Dokument drucken ließ, funktionierte es genau so, wie erwartet.
Die Verwendung der Klasse "QTextCodec" ist in diesem Fall aber in der Tat sehr empfehlenswert: insbesondere, wenn man wie in meinem Fall die Englischen und Chinesischen Texte gemischt ausgeben muss:

QTextCodec :: setCodecForCStrings (QTextCodec :: codecForName ("UTF-8"));

(Obwohl es in diesem Fall schlussendlich sogar ohne diese funktionierte! - Es rächte sich aber später...)

Ich habe es unter WindowsXP gemacht: in diesem Fall muss die Unterstützung für die Ostasiatische Sprachen installiert werden. Danach können die Schriften "SimSun" bzw. "SimHei" für die Ausgabe auf dem PDF-Printer ausgewählt werden.

Als nächstes musste ich den Inhalt der selben XML Datei in einer etwas anderen Form in eine HTML-Datei schreiben. HIER war der Einsatz der Klasse "QTextCodec" und das Setzen auf "UTF-8" unerlässlich. Gemein war die Tatsache, dass ich den Firefox durch die Anwahl der chinesischen Codeseite sogar überreden konnte, den Chinesischen Zeichensatz fast vollständig anzuzeigen. Aber erst nachdem ich die Ausgabe der Texte als "UTF-8" erzwungen habe, funktionierte es sowohl im IE als auch im Firefox ganz von selbst. (Was jedoch noch wichtiger war: die Sinumerik 840sl hat die Datei auch richtig angezeigt.)

Danke für die Unterstützung

Gruß
Harry.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Antworten