Ir al contenido



Foto

Enviar una impresión a una impresora de Red


  • Por favor identifícate para responder
4 respuestas en este tema

#1 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 328 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 13 agosto 2015 - 08:05

Buenas. Tengo una impresora de red en la LAN. La misma tiene una IP fija.
Quisiera desde mi aplicación Delphi enviar una impresión hacia ella utilizando la dirección IP.
Utilizo QReport y Delphi XE5.

Gracias.

Santiago.


  • 0

#2 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 13 agosto 2015 - 10:26

Hola

 

Quiero entender que: ¿Quiéres enviar la impresión directamente sin tener la impresora instalada localmente?

 

Saludos


  • 0

#3 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 328 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 13 agosto 2015 - 11:13

Hola

 

Quiero entender que: ¿Quiéres enviar la impresión directamente sin tener la impresora instalada localmente?

 

Saludos

No, por supuesto que no. La impresora está instalada localmente.

En este lugar me piden que haya un plan de contingencia rápido acerca de impresoras, si se rompe una, la reemplazamos por otra rápidamente. En favor de ello tengo una impresora de red con una IP fija.

Si le pasa algo a esa máquina, la reemplazo por otra que tengo lista, le pongo la misma IP fija y listo, sigo sin problemas.

El drama es que en este punto Delphi me pide el nombre de la impresora y no una dirección IP.

Cuando hago cambios de impresora la segunda tiene que tener otro nombre, ¿o no?, y tendría que reconfigurar todas las estaciones para que impriman en la nueva. La idea es que no sea así, que solamente cambiando la impresora y poniéndole la misma IP fija todos sigan imprimiendo sin drama.

Espero haber sido claro.

 

Santiago.


  • 0

#4 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 13 agosto 2015 - 02:31

Se me ocurren dos opciones:

 

1). Matricular el nombre de la impresora en uso en un archivo de configuración. Este archivo puede ser compartido en red para que la aplicación cliente lo lea cuando se inicie.

 

2). Utilizar un comando de red para conocer el nombre del host por medio de su IP, por ejemplo  nbtstat -a 192.168.1.100. De pronto en las utilerias TCP/IP de Delphi puedes encontrar algún componente que te haga lo mismo.

 

 

Saludos


  • 0

#5 escafandra

escafandra

    Advanced Member

  • Moderadores
  • PipPipPip
  • 3.937 mensajes
  • LocationMadrid - España

Escrito 14 agosto 2015 - 06:53

Esta función resuelve la IP encontrando el nombre de la impresora, a partir de ahí puedes usar ese nombre para imprimir. 
 

delphi
  1. uses
  2.   Windows, SysUtils, Winsock, Winspool;
  3.  
  4. type
  5.   APrinterInfo2 = array [0..0] of TPrinterInfo2;
  6.   PAPrinterInfo2 = ^APrinterInfo2;
  7.  
  8. function GetPrinterName(IP: String): String;
  9. var
  10.   Data: TWSADATA;
  11.   He: Phostent;
  12.   Addr: integer;
  13.   List: PAPrinterInfo2; //PPrinterInfo2;
  14.   SizeNeeded, NumItems, Item: DWORD;
  15. begin
  16.   Result:= '';
  17.   if WSAStartup(MAKEWORD(1, 1), Data) = 0 then
  18.   begin
  19.     Addr:= inet_addr(PCHAR(IP));
  20.     if Addr <> INADDR_NONE then
  21.     begin
  22.       He:= gethostbyaddr(@Addr, sizeof(Addr), AF_INET);
  23.       if He <> nil then
  24.         Result:= He.h_name;
  25.     end;
  26.     WSACleanup;
  27.   end;
  28.   if Result <> '' then
  29.   begin
  30.     if pos('.', Result) > 0 then
  31. Result:= copy(Result, 1, pos('.', Result)-1);
  32.     EnumPrinters(PRINTER_ENUM_LOCAL, nil, 2, nil, 0, SizeNeeded, NumItems);
  33.     GetMem(List, SizeNeeded);
  34.     if EnumPrinters(PRINTER_ENUM_LOCAL, nil, 2, List, SizeNeeded, SizeNeeded, NumItems) then
  35.     begin
  36.       for Item:= 0 to NumItems-1 do
  37.       begin
  38.         if List[Item].pPortName = Result then
  39.         begin
  40.           Result:= List[Item].pPrinterName;
  41.           break;
  42.         end;
  43.       end;
  44.     end;
  45.     FreeMem(List);
  46.   end;
  47. end;

Saludos.
  • 5