Fórum Imprimir PDF externo direto para impressora #623596
28/11/2024
0
Gostaria de alguma dica de como Imprimir PDF externo direto para impressora pádrão do windows usando Delphi.

Alberto
Curtir tópico
+ 0Posts
29/11/2024
Natanael Ferreira
Coloque no form um botão e um combobox para listar as impressoras instaladas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 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 . |
Gostei + 0
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.
Gostei + 0
02/12/2024
Raylan Zibel
Gostei + 0
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.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)