Konuyu Değerlendir
  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
Lazreport pdf çıktısında türkçe karakter sorunu
#1
Arkadaşlar lazreport ile veriler düzgün görünürüken, raporu pdf çıktısı olarak almak istediğimde türkçe karakterler düzgün çıkmıyor. Bu sorunu nasıl çözebilirim?
[Resim: ERRJLZ.png]
Bul
Alıntı
#2
Selam,
Ben bu sorunu Delphi ve lazarus ta şu şekilde çözmüştüm.
lazreport taki, pdfexport klasöründeki "lr_e_pdf.pas" dosyasında aşağıdaki değişiklikleri yaptım.
Const olarak aşağıdaki HARF değişkenini ekleyin,

Kod:
type
    TfrMemoView_ = class(TfrMemoView);
    TPRText_ = class(TPRText);

const
    PDFEscx = 0.8;
    PDFEscy = 0.8;
   HARF : Array[1..2,1..12] of char=(('ğ','Ğ','ü','Ü','ş','Ş','ı','İ','ö','Ö','ç','Ç'),
                                     ('g','G','u','U','s','S','i','I','o','O','c','C'));

Daha sonra;
Kod:
procedure TfrTNPDFExportFilter.OnText(X, Y: Integer; const Text: string;
   View: TfrView);
yukarıdaki procedurun üstüne aşağıdaki functionu oluşturun,

Kod:
function Cevir(A:String):String;
var
I,J : Integer;
S : String;
begin
    S:=A;
    for I:=1 to length(S) do
      for J:=1 to 12 do
        if S[I]=harf[1,J] then S[I]:=harf[2,J];
    Result:=S;
end;

Sonrada;
Kod:
procedure TfrTNPDFExportFilter.OnText(X, Y: Integer; const Text: string;
   View: TfrView);
yukarıdaki procedurde;

 PRTLabel.Text := Text; satırını  PRTLabel.Text := Cevir(Text); olarak değiştirip, projeyi yeniden compile etmeniz yeterli olacaktır.
Bul
Alıntı
#3
Dediklerinizi yaptım fakat compile yapınca aşağıdaki hatayı alıyorum.
[Resim: BAAv69.png]
lr_e_pdf.pas(82,44) Error: Incompatible types: got "Constant String" expected "Char"
Bul
Alıntı
#4
Kendi yaptığım projemde bende bu işe çözüm bulamamıştım. Daha doğrusu cairo export bu işi düzgün yapıyor fakat onunda windows tarafında eksik yada uyumsuz sistem dosyaları problemiyle uğraşmak istemediğim için ben doğrudan pdf printer yükleyip kullanıcıya isterse çıktıyı pdf printera göndermesini söyledim. Bu arada veritabanı codepage UTF8 idi. Galiba win1254 de sorun pek olmuyordu. Birde bu konuda rusların kendi dil karakterleri için bulduğu çözümleride var. Uğraşmayı göze alırsanız o dosyayı Türkçe karakterlere uyumlu hale de getirebilirsiniz.
Bul
Alıntı
#5
Bencede bu konuda pdf printer dan çıktı almak daha mantıklı. Teşekkürler.
Bul
Alıntı
#6
(07-08-2017, 09:31 AM)soncizgi demiş ki: Dediklerinizi yaptım fakat compile yapınca aşağıdaki hatayı alıyorum.
[Resim: BAAv69.png]
lr_e_pdf.pas(82,44) Error: Incompatible types: got "Constant String" expected "Char"

Selam, array of char değilde array of string yada array of string[1] diye tanımlayın harf değişkenini, şimdi deneyemiyorum lazarus yok bu makinada, pazartesi işyerinde deneyip sonucu söylerim. Delphi den almıştım bu kodu
Bul
Alıntı
#7
Tekrar Selam,
Kusura bakmayın yanlış hatırlıyormuşum, delphi de kod sorunsuz çalışıyor fakat lazarus ta problemli çalıştı, türkçe karakterleri basmıyor, Durali beyin söylediği gibi carioexport ile işi çözebiliyoruz, fakat onda da birçok dll gerekiyor.
Bul
Alıntı
#8
Teşekkürler.
Bul
Alıntı
#9
(07-08-2017, 08:06 AM)esistem demiş ki: Selam,
Ben bu sorunu Delphi ve lazarus ta şu şekilde çözmüştüm.
lazreport taki, pdfexport klasöründeki "lr_e_pdf.pas" dosyasında aşağıdaki değişiklikleri yaptım.
Const olarak aşağıdaki HARF değişkenini ekleyin,

Kod:
type
    TfrMemoView_ = class(TfrMemoView);
    TPRText_ = class(TPRText);

const
    PDFEscx = 0.8;
    PDFEscy = 0.8;
   HARF : Array[1..2,1..12] of char=(('ğ','Ğ','ü','Ü','ş','Ş','ı','İ','ö','Ö','ç','Ç'),
                                     ('g','G','u','U','s','S','i','I','o','O','c','C'));

Daha sonra;
Kod:
procedure TfrTNPDFExportFilter.OnText(X, Y: Integer; const Text: string;
   View: TfrView);
yukarıdaki procedurun üstüne aşağıdaki functionu oluşturun,

Kod:
function Cevir(A:String):String;
var
I,J : Integer;
S : String;
begin
    S:=A;
    for I:=1 to length(S) do
      for J:=1 to 12 do
        if S[I]=harf[1,J] then S[I]:=harf[2,J];
    Result:=S;
end;

Sonrada;
Kod:
procedure TfrTNPDFExportFilter.OnText(X, Y: Integer; const Text: string;
   View: TfrView);
yukarıdaki procedurde;

 PRTLabel.Text := Text; satırını  PRTLabel.Text := Cevir(Text); olarak değiştirip, projeyi yeniden compile etmeniz yeterli olacaktır.

64 bitte kod derleniyor. 32 bitte sorun var onuda char'ı string yapıp stringreplace ile çözdüm ama çözüm Türkçe karakter olarak gözükmesini değil hatalı gözükmesini engelliyor. Güzel olanı Türkçe karakterle pdf alabilmek. Ama emeğin için teşekkür ederiz.
Bul
Alıntı
Topic Options
Foruma Git:




Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi