Imprimir PDF externo direto para impressora
28/11/2024
0
Gostaria de alguma dica de como Imprimir PDF externo direto para impressora pádrão do windows usando Delphi.
Alberto
Posts
29/11/2024
Natanael Ferreira
Coloque no form um botão e um combobox para listar as impressoras instaladas.
unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Printers, ShellApi, Vcl.StdCtrls; type TForm4 = class(TForm) Button1: TButton; cbxImpressoras: TComboBox; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; implementation {$R *.dfm} function PrintFile(aFile: TFileName; iImpressora: integer): Boolean; // Funcao de impressao var Device, Driver, Port: array [0 .. 255] of Char; S: string; hDeviceMode: THandle; pDevmode: PDeviceMode; begin Printer.PrinterIndex := iImpressora; Printer.GetPrinter(Device, Driver, Port, hDeviceMode); // Imprimir somente frente "Simplex" if hDeviceMode <> 0 then begin pDevmode := GlobalLock(hDeviceMode); if pDevmode <> nil then begin try with pDevmode^ do begin dmDuplex := DMDUP_SIMPLEX; dmFields := dmFields or DM_DUPLEX; end; finally GlobalUnlock(hDeviceMode); end; end; end; S := Format('"%s" "%s" "%s"', [Device, Driver, Port]); Result := ShellExecute(Application.Handle, 'printto', PCHAR(aFile), PCHAR(S), nil, SW_HIDE) > 32; end; function GetDefaultPrinterName: string; // Pega nome da impressora padrão begin if (Printer.PrinterIndex >= 0) then Result := Printer.Printers[Printer.PrinterIndex] else Result := EmptyStr; end; procedure TForm4.Button1Click(Sender: TObject); begin if PrintFile('Arquivo.pdf', cbxImpressoras.ItemIndex) then // Imprimindo arquivo diretamente ShowMessage('Sucesso') else ShowMessage('Falha na impressao'); end; procedure TForm4.FormCreate(Sender: TObject); // Preenche combobox com as impressoras instaladas e posiciona na padrao begin cbxImpressoras.Clear; cbxImpressoras.Items.Assign(Printer.Printers); cbxImpressoras.ItemIndex := cbxImpressoras.Items.IndexOf(GetDefaultPrinterName); end; end.
29/11/2024
Alberto
E tem o incoveniente (no meu caso) que o reader abre o documento PDF na tela.
Eu queria só imprimir, sem mostrar na tela.
02/12/2024
Raylan Zibel
02/12/2024
Natanael Ferreira
E tem o incoveniente (no meu caso) que o reader abre o documento PDF na tela.
Eu queria só imprimir, sem mostrar na tela.
Nos testes que fiz aqui funcionou corretamente. Imprimiu direto sem abrir o leitor de pdf.
Não tenho o Acrobat Reader instalado. Meu leitor de PDF é o SumatraPDF que é gratuito.
Não sei se para quem tem o Acrobat Reader instalado ele é aberto. Não tenho ele instalado para testar.
Clique aqui para fazer login e interagir na Comunidade :)