Windows üzerinden herhangi bir dosyayı yazıcıya gönderince türkçe karakterleri yazdırıyor fakat resim tabanlı gönderiyor. Yani yazıcının gerçek fontu gibi yazdırmıyor. Yazılar gözle görünür derecede bozuk.
Delphi ile yazdırma kısmını aşağıdaki kodu veya buna benzer kodları kullandığımda, çok güzel şekilde yazıcı çıktısı alabiliyorum veya bilgiler yazıcıya direk gittiği için yazıcıyı programlayabiliyorum.
Örnek chr(15) gönderip yazıcıyı CONDENSED mode alabiliyorum.
Alttaki kodda yazıcı ismini verince çalışıyor.
Kod: Tümünü seç
procedure TForm1.PrintOnDotMatrix;
var
Handle: THandle;
N: DWORD;
DocInfo1: TDocInfo1;
s : string;
begin
if not OpenPrinter(PChar('Epson LX-300+'), Handle, nil) then
begin
ShowMessage('Printer «DotMatrix» not found.');
Exit;
end;
with DocInfo1 do
begin
pDocName := PChar('Document Name');
pOutputFile := nil;
pDataType := 'RAW';
end;
StartDocPrinter(Handle, 1, @DocInfo1);
s := 'IĞÜŞİÖÇ ığüşiöç First line of first page' + #13 + #10;
WritePrinter(Handle, PChar(s), Length(s), N);
s := 'Second line of first page' + #13 + #10;
WritePrinter(Handle, PChar(s), Length(s), N);
EndPagePrinter(Handle);
EndDocPrinter(Handle);
ClosePrinter(Handle);
end;
Kod: Tümünü seç
type
TPassThroughData = record
nLength: Word;
Data: array[0..255] of Char;
end;
function TFormFaturaDetaylar.DirectToPrinter(S: string; NextLine: Boolean): Boolean;
var
PTBlock: TPassThroughData;
TestInt: Integer;
begin
TestInt := PassThrough;
if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT), @testint, nil) > 0 then
begin
if NextLine then S := S + #13 + #10;
StrPCopy(PTBlock.Data, S);
PTBlock.nLength := StrLen(PTBlock.Data);
Escape(Printer.Handle, Passthrough, 0, @PTBlock, nil);
Result := True;
end
else
Result := False;
end;
PrinterSetupDialog := TPrinterSetupDialog.Create(self);
try
if PrinterSetupDialog.Execute then
begin
...
...
DirectToPrinter(PrintData, true);
end;
finally
PrinterSetupDialog.free;
end;
Çıktıları incelediğimde PC437 US olarak bastığını görüyorum.
Yazıcının fabrika değeri de PC437 US
Forumda gördüğüm kadarıyla bazı arkadaşlar win_to_dos karakter çevrim tablosu yapın şeklinde çözüm sunmuşlar. Fakat ben zaten onu kullandım ve ĞŞ haricindeki karakterleri çeviriyor.
Ama şöylede bir durum var. WindoxXP üzerinde çalıştıra edit.com yazınca çıkan editörden Türkçe karakterleri yazıp gönderince hiç bir sorun olmadan yazdırabiliyor.
Benim anladığım Delphi ile LPT (DOT MATRİX) yazıcıya direkt olarak bilgi gönderilemiyor.
Yazıcıda PC857 Türkçe karakter seti ayarlıdır. Özellikle EPSON servisini aradım ve bir tane program gönderdiler. Program ile cihaz ayarlarını okutup teyit ettim.
Aynı zamanda Tear Off ve Load/Eject tuşlarına basılı tutarak cihazı açtım. Ayarlı fontu buradan da teyit ettim.
ANLAŞMAZLIK OLMASIN DİYE TEKRAR SÖYLÜYORUM.
NORMALDE Delphi yazıcı bileşeni Synopse veya word, excel gibi programlardan yazıcıya göndermede Türkçe karakterler sorun olmuyor. Fakat font bozuk çıkıyor. Sanki yazıyı resim tabanlı gönderiyor.
Synopse ile şu anda kullanıyorum fakat çok fazla yer kaplıyor. Condensed özelliğini veya diğer yazıcı programlama özelliklerini kullanamıyorum.
Bu yapmak istediğim ise fatura modülünün yazdırma kısmı.
Yardımlarınızı bekliyorum. Şimdiden teşekkürler.