[gelöst] Probleme bei libjpfpdf mit SetUTF8(True)

Rund um die LCL und andere Komponenten
Antworten
kirchfritz
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)

Beitrag von kirchfritz »

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.
Screenshot 2025-07-11 085641.png
Screenshot 2025-07-11 085641.png (111.75 KiB) 633 mal betrachtet
Leider geht das nur(!) in einer Konsolenanwendung.

Die selbe Procedure in der GUI Anwendung hingegen scheint SetUTF8(True) total zu ignorieren.
Screenshot 2025-07-11 085953.png
Screenshot 2025-07-11 085953.png (123.2 KiB) 633 mal betrachtet
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



JPDFTest_fuer_Forum.zip
(1.34 MiB) 112-mal heruntergeladen
Zuletzt geändert von kirchfritz am Fr 11. Jul 2025, 11:22, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10942
Registriert: Mo 11. Sep 2006, 19:01

Re: Probleme bei libjpfpdf mit SetUTF8(True)

Beitrag von theo »

Ich denke, das Ding ist nicht wirklich Unicode-fähig.

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')); 

Benutzeravatar
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)

Beitrag von af0815 »

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).

kirchfritz
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)

Beitrag von kirchfritz »

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.
Dateianhänge
libjpfpdf.pas
(66.72 KiB) 138-mal heruntergeladen

Joh
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)

Beitrag von Joh »

ok... auch 'ne Möglichkeit.

Ich hatte alle Aufrufe mit

Code: Alles auswählen

Writer(6.5, UTF8ToISO_8859_15('Gemäß...'));
ersetzt.

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
Datei mit RoundedRect (und DIN A2 bis DIN A0):
libjpfpdf.zip
(13.21 KiB) 136-mal heruntergeladen
just my two Beer

Benutzeravatar
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)

Beitrag von af0815 »

Komisch, weil in der libjpfpdf wird das hier bei jeden writer aufruf gemacht

Code: Alles auswählen

  if (pUTF8) then begin
    vText := UTF8ToISO_8859_1(vText);
    SetUTF8(False);
    fUTF8 := True;
  end;
und bei SetUTF8

Code: Alles auswählen

procedure TJPFpdf.SetUTF8(mode: Boolean);
begin
  pUTF8 := mode;
end;
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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10942
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] Probleme bei libjpfpdf mit SetUTF8(True)

Beitrag von theo »

af0815 hat geschrieben: Fr 11. Jul 2025, 21:14 Komisch, weil in der libjpfpdf wird das hier bei jeden writer aufruf gemacht
Aber nur in der von kirchfritz angepassten Version, nachdem ich UTF8ToISO_8859_1 vorgeschlagen hatte.

fpPDF wäre wirklich Unicode tauglich. https://wiki.freepascal.org/fcl-pdf

Antworten