Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus

  • 16 odgovora
  • 3.980 pregleda
Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 21.12.2017. u 08:46 · pre 107 meseci #1
Pozdrav društvo,

imam problem prilikom snimanja reporta u pdf, ne prihvata karaktere "č" i "ć", ispisuje samo "?", dok na samom prikazu reporta prikaže sve kako treba.

Pokušavao sam na više načina, al nikako da odgonetnem u čemu je kvaka, verovatno negde prilikom eksporta podataka prilikom snimanja.

Nadam se da je neko imao sličan problem, da skratim sebi muke, već dva dana me to koči da završim neki poslić.

Nije mi rešenje da idem preko nekog pdf printera (CutePdf i sl., i ako preko toga sačuva kako treba), pošto je u pitanju izrada više stotina izveštaja u pdf formatu koje kupim iz baze.
Potpis
Nikad izvini!
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 21.12.2017. u 09:19 · pre 107 meseci #2
Šta koristiš za snimanje u pdf? FastReport ima svoj alat, ili?
Jesi probao koristiti synpdf?
Makar on i meni u rijetkim situacijama radi probleme sa "našim" slovima. Kada snimim pdf kod sebe i otvorim, vidim naša slova, a u rijetkim slučajevima kada to pošaljem nekome na mail se ne vide naša slova. Nije mi to nikako jasno, ali su jako rijetke situacije pa se nisam time puno bavio.
Potpis
F
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 21.12.2017. u 13:24 · pre 107 meseci #3
FastReport ima svoj neki alat za snimanje u txt,pdf,csv.

Imam dosta izveštaja već odrađenih u njemu, tako da prelazak na neku drugu komponentu bi mi oduzelo dosta vremena za ponovno kreiranje reporta.

Kad snimim report u txt, upiše kako treba.
Potpis
Nikad izvini!
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 21.12.2017. u 18:43 · pre 107 meseci #6
Probao sam al ništa.

Pronašao sam u PDFType.pas
Code:
function CP1252(const W: Word; const InvalidChar: Char): Char;
begin
  case W of
    $00..$7F,$A0..$FF: result := char(W);
    $20AC: result := #$80;
    $201A: result := #$82;
    $0192: result := #$83;
    $201E: result := #$84;
    $2026: result := #$85;
    $2020: result := #$86;
    $2021: result := #$87;
    $02C6: result := #$88;
    $2030: result := #$89;
    $0160: result := #$8A;
    $2039: result := #$8B;
    $0152: result := #$8C;
    $017D: result := #$8E;
    $2018: result := #$91;
    $2019: result := #$92;
    $201C: result := #$93;
    $201D: result := #$94;
    $2022: result := #$95;
    $2013: result := #$96;
    $2014: result := #$97;
    $02DC: result := #$98;
    $2122: result := #$99;
    $0161: result := #$9A;
    $203A: result := #$9B;
    $0153: result := #$9C;
    $017E: result := #$9E;
    $0178: result := #$9F;
  else
        result:=InvalidChar;
  end;
end;

i
Code:
function _UTF8ToWinAnsi(const value: string; InvalidChar:char='?'): string;
var
  W: widestring;
  i: Integer;
begin
   W := UTF8Decode(Value);
  result := '';
  for i:=1 to length(w) do
    result := result + CP1252(word(w[i]), InvalidChar);
end; 

Potpis
Nikad izvini!
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 21.12.2017. u 20:47 · pre 107 meseci #7
Pošto ti printa ? a ? je ovdje definiran kao InvalidChar, to nam govori da nema naših znakova u CP1252.
Ali $017D bi trebalo biti slovo Ž tako da mi nije jasno zašto ne daje rezultat.

Šta dobiješ ako napraviš ovo:

Code:

function _UTF8ToWinAnsi(const value: string; InvalidChar:char='?'): string;
var
  W: widestring;
  i: Integer;
begin 
  result := value;
end; 


[Ovu poruku je menjao captPicard dana 21.12.2017. u 21:59 GMT+1]
Potpis
F
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 22.12.2017. u 09:02 · pre 107 meseci #9
Treba sa dodas ove kodoveu tu listu kodova:


Code (delphi):


...
  function WSC(ws: WideString): WideChar;
  begin
    Result := ws[1];
  end;
begin
  Memo1.Lines.Add('$' + IntToHex(ord(WSC('Č')), 4) + ': result := #$'+ IntToHex(Ord(AnsiChar('Č')), 2));
  Memo1.Lines.Add('$' + IntToHex(ord(WSC('č')), 4) + ': result := #$'+ IntToHex(Ord(AnsiChar('č')), 2));
  Memo1.Lines.Add('$' + IntToHex(ord(WSC('Ć')), 4) + ': result := #$'+ IntToHex(Ord(AnsiChar('Ć')), 2));
  Memo1.Lines.Add('$' + IntToHex(ord(WSC('ć')), 4) + ': result := #$'+ IntToHex(Ord(AnsiChar('ć')), 2));
...

 


Inace 1252 je cirilicna strana 1251 je latinicna.
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 22.12.2017. u 19:59 · pre 107 meseci #12
Sad sam uspeo da pogledam PDFType.pas i tamo ima i CP1250. To je ovdasnja kodna strana koju sam ja pozaboravljao :)

Ako se doda u CP1250 ovi kodovi:

$010C: result := #$C8
$010D: result := #$E8
$0106: result := #$C6
$0107: result := #$E6


i ako se izmeni ovako:

Code (delphi):

function _UTF8ToWinAnsi(const value: string; InvalidChar:char='?'): string;
var
 
  W: widestring;
 
  i: Integer;

begin
 
  W := UTF8Decode(Value);
 
  for i:= 1 to length(w) do
   
    result := result + CP1250(word(w[i]), InvalidChar);
 
  showmessage(result);

end;
 


i pozove ovako:

_UTF8ToWinAnsi(UTF8Encode('ČčĆć'));

onda ce se videti poruka sa tim slovima.

Showmessage moze da ostane i kad startuje pravljenje pdf pojavice se poruka i onda moze da se vidi da li su slova slova tu, pre nego sto se napravi pdf.
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 23.12.2017. u 07:25 · pre 107 meseci #13
To se verovatno igrao neko pre mene sa ovim, pa je ostala ta funkcija cp1250, ali koliko vidim u units-u, nema ulogu.

Problem je još negde dublje, verovatno negde na samom ispisu u dokument, nisam ranije radio sa pdf-om, ne znam na koji način funkcioniše, tražio sam po units-ima negde dal se spominje codepage il nešto sl., al nisam našao. Mislim da funkcioniše nešto poput html, što se tiče ptikaza, i da se negde može to definisati al nemam sreće da nađem.

Funkcija _UTF8ToWinAnsi priprema odgovarajući string kodiran u cp1252, verovatno je tako i definisano negde samoj ustrukturi pdf-a da takve prepoznaje i ispisuje.

Hvala u svakom slučaju na trudu...
Potpis
Nikad izvini!
Re: Problem prilikom snimanja karaktera č i ć u pdf - FastReport 2.3 + Lazarus 23.12.2017. u 11:51 · pre 107 meseci #16

Ako ae u guglu ukuca "region settings windows code page" izbaci kratko uputstvo kako se menja kodna strana a tako moze i da se proveri.
Recimo, ako je Serbian cirilic onda latinica ne moze da se vidi.

Ne tvrdim da je to ovde slucaj ili problem nego samo dodajem jer je to u vezi sa kodnim stranama i sa ovom temom.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme