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.
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 :)