yazıcıya prn dosyası gönderme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kodcuminik
Üye
Mesajlar: 140
Kayıt: 11 Oca 2009 10:25

yazıcıya prn dosyası gönderme

Mesaj gönderen kodcuminik »

merhaba bartender ile oluşturduğum bir prn dosyam var

ShellExecute(Handle, 'print', PChar('c:\test.docx'), nil, nil, SW_HIDE) ;

ile yazıcıya çıktı gönderebiliyorum fakat ben
test.prn dosyamı gönderemiyorum
elimde hazır olan prn dosyasını yazıcıya nasıl gönderebilirim
bilmezler bilmediklerinide bilmezler ama kendilerini bilir sanırlar
ertank
Kıdemli Üye
Mesajlar: 1651
Kayıt: 12 Eyl 2015 12:45

Re: yazıcıya prn dosyası gönderme

Mesaj gönderen ertank »

Merhaba,

PRN dosyaları yazıcıların RAW formata dönüştürülmüş dosyalarıdır. Hangi yazıcı sürücüsü kullanılarak oluşturuldu ise bu yazıcıya gönderilmelidir. Bu tür dosyaları direk olarak Windows printer spooler servisine göndererek yazdırabilirsiniz. Aşağıdaki gibi bir kod kullanarak bunu yapmanız mümkün olabilir:

Kod: Tümünü seç

uses
  Winapi.WinSpool,
  Printers;

function SpoolFile(const FileName, PrinterName: string): Integer;
var
  Buffer: record
    JobInfo: record // ADDJOB_INFO_1
      Path: PChar;
      JobID: DWORD;
    end;
    PathBuffer: array[0..255] of Char;
  end;
  
  SizeNeeded: DWORD;
  Handle: THandle;
  PrtName: string;
  Ok: Boolean;
begin
  // Flush job to printer
  PrtName := PrinterName;

  // Get Default printer name if not supplied
  if PrtName = EmptyStr then PrtName := Printer.Printers[Printer.PrinterIndex];

  Ok := False;
  if OpenPrinter(PChar(PrtName), Handle, nil) then
  begin
    if AddJob(Handle, 1, @Buffer, SizeOf(Buffer), SizeNeeded) then
    begin
      if CopyFile(PChar(FileName), Buffer.JobInfo.Path, True) then
      begin
        if ScheduleJob(Handle, Buffer.JobInfo.JobID) then
        begin
          Ok := True;
        end;
      end;
    end;
  end;

  if not Ok then
  begin
    Result := GetLastError();
  end
  else
  begin
    Result := 0;
  end;
end;
NOT: Kod Delphi 10.2.3 ile çalışmaktadır. Delphi 7 için ufak düzenlemeler gerekecektir.
Cevapla