Imprimir PDF externo direto para impressora
Olá
Gostaria de alguma dica de como Imprimir PDF externo direto para impressora pádrão do windows usando Delphi.
Gostaria de alguma dica de como Imprimir PDF externo direto para impressora pádrão do windows usando Delphi.
Alberto
Curtidas 0
Respostas
Natanael Ferreira
28/11/2024
Segue código de exemplo:
Coloque no form um botão e um combobox para listar as impressoras instaladas.
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.
GOSTEI 0
Alberto
28/11/2024
Funciona, mas só se o adobe acrobat reader estiver instalado.
E tem o incoveniente (no meu caso) que o reader abre o documento PDF na tela.
Eu queria só imprimir, sem mostrar na tela.
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
Raylan Zibel
28/11/2024
Tente usar o fast report pra carregar o pdf de forma invisivel e jogar pra impressão.
GOSTEI 0
Natanael Ferreira
28/11/2024
Funciona, mas só se o adobe acrobat reader estiver instalado.
E tem o incoveniente (no meu caso) que o reader abre o documento PDF na tela.
Eu queria só imprimir, sem mostrar na tela.
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