[gelöst] Probleme bei libjpfpdf mit SetUTF8(True)
-
- Beiträge: 236
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
[gelöst] Probleme bei libjpfpdf mit SetUTF8(True)
Hallo,
ich verwende die libjpfpdf zur Erstellung von PDF-Dateien. Das Ganze klappt so weit so gut.
Für die Darstellung von Texten mit Sonderzeichen gibt es die procedure SetUTF8(true) bzw SetUFT8(false).
Bei SetUTF8(true) wird der Text mit Sonderzeichen richtig dargestellt.
Bei SetUTF8(false) wird der Text mit Sonderzeichen falsch dargestellt.
Leider geht das nur(!) in einer Konsolenanwendung.
Die selbe Procedure in der GUI Anwendung hingegen scheint SetUTF8(True) total zu ignorieren. Offensichtlich hat die GUI-Anwendung ein Ansi-UTF8-Encoding bzw. ein CodePage Problem.
Wer kann mir dabei helfen, dieses Problem zu lösen?
Beispielprojekte für Konsole und GUI anbei.
Grüße
Fritz
ich verwende die libjpfpdf zur Erstellung von PDF-Dateien. Das Ganze klappt so weit so gut.
Für die Darstellung von Texten mit Sonderzeichen gibt es die procedure SetUTF8(true) bzw SetUFT8(false).
Bei SetUTF8(true) wird der Text mit Sonderzeichen richtig dargestellt.
Bei SetUTF8(false) wird der Text mit Sonderzeichen falsch dargestellt.
Leider geht das nur(!) in einer Konsolenanwendung.
Die selbe Procedure in der GUI Anwendung hingegen scheint SetUTF8(True) total zu ignorieren. Offensichtlich hat die GUI-Anwendung ein Ansi-UTF8-Encoding bzw. ein CodePage Problem.
Wer kann mir dabei helfen, dieses Problem zu lösen?
Beispielprojekte für Konsole und GUI anbei.
Grüße
Fritz
Zuletzt geändert von kirchfritz am Fr 11. Jul 2025, 11:22, insgesamt 1-mal geändert.
Re: Probleme bei libjpfpdf mit SetUTF8(True)
Ich denke, das Ding ist nicht wirklich Unicode-fähig.
Aber so geht es für Umlaute etc. mindestens auf Linux:
Aber so geht es für Umlaute etc. mindestens auf Linux:
Code: Alles auswählen
uses ... LConvEncoding;
...
SetUTF8(False);
...
Writer(6.5,UTF8ToISO_8859_1('Kirch · Kirch Avião Índio Carroça'));
- af0815
- Lazarusforum e. V.
- Beiträge: 6867
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Probleme bei libjpfpdf mit SetUTF8(True)
Ohne genau zu testen fällt mir am Code auf, das du in der einen Version (GUI) eine Zwischenvariable nimmst, im anderen Fall nicht. Das kann bereits einen großen Unterschied machen, weil die Fälle vom Compiler anders aufgelöst werden. Direkt Zuweisung zu Writer und über die Variable s sind nicht als gleich zu betrachten. Zusätzlich zu dem was Theo hinzugefügt hat.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 236
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 4.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: Probleme bei libjpfpdf mit SetUTF8(True)
Ich habe nach den Anregungen von Theo in der libjpfpdf.pas die Aufrufe von UTF8ToAnsi durch UTF8ToISO_8859_1 ersetzt.
Damit läuft unter Windows 11 sowohl die Konsolen-Anwendung als auch die GUI-Anwendung erwartungsgemäß fehlerfrei.
Die Sonderzeichen werden bei SetUTF8(true) korrekt dargestellt!
Danke Theo
Die geänderte libjpfpdf.pas Datei habe ich hier angehängt.
Damit läuft unter Windows 11 sowohl die Konsolen-Anwendung als auch die GUI-Anwendung erwartungsgemäß fehlerfrei.
Die Sonderzeichen werden bei SetUTF8(true) korrekt dargestellt!
Danke Theo
Die geänderte libjpfpdf.pas Datei habe ich hier angehängt.
- Dateianhänge
-
- libjpfpdf.pas
- (66.72 KiB) 47-mal heruntergeladen
-
- Lazarusforum e. V.
- Beiträge: 309
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: [gelöst] Probleme bei libjpfpdf mit SetUTF8(True)
ok... auch 'ne Möglichkeit.
Ich hatte alle Aufrufe mit
ersetzt.
PS: eventuell interessiert dich ja meine Version mit dem RoundedRectangle. Aufruf:
Datei mit RoundedRect (und DIN A2 bis DIN A0):
Ich hatte alle Aufrufe mit
Code: Alles auswählen
Writer(6.5, UTF8ToISO_8859_15('Gemäß...'));
PS: eventuell interessiert dich ja meine Version mit dem RoundedRectangle. Aufruf:
Code: Alles auswählen
pdf.RoundedRect(x, y, breite, Hoehe, Eckenradius, 'B'); // der ursprüngliche/äußere Rahmen
just my two Beer
- af0815
- Lazarusforum e. V.
- Beiträge: 6867
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: [gelöst] Probleme bei libjpfpdf mit SetUTF8(True)
Komisch, weil in der libjpfpdf wird das hier bei jeden writer aufruf gemacht
und bei SetUTF8
Daher, wenn man vor jedem writer aufruf SetUTF8 aufruft, dann wird das UTF8ToISO_8859_1 implizit im writer aufgerufen. Damit sollte der Aufruf der Konvertierung unnötig sein, solange man das SetUTF8(true) vorher aufruft.
Code: Alles auswählen
if (pUTF8) then begin
vText := UTF8ToISO_8859_1(vText);
SetUTF8(False);
fUTF8 := True;
end;
Code: Alles auswählen
procedure TJPFpdf.SetUTF8(mode: Boolean);
begin
pUTF8 := mode;
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).