GeneXus - imprimir un archivo pdf que se encuentra en una unidad de forma directa, sin previsualizacion

 
Vista:

imprimir un archivo pdf que se encuentra en una unidad de forma directa, sin previsualizacion

Publicado por Manuel (32 intervenciones) el 15/06/2012 17:48:22
Hola gente

Bueno esta vez les traigo una solucion para poder imprimir archivos pdf de forma directa sin previa visualizacion solo llamandolo por su nombre y ubicacion.(OJO , los archivos pdf ya deben existir en una carpeta , en ningun momento genero archivos pdf solo los hubico y los imprimo , simple como eso ), bueno una vez echa la intro les comento que , yo trabajo en genexus x evo 1 generando en java para ambiente web (pronto trabajare en genexus 2:) )

-Logica de resolucion de problema
0.- Contar con una carpeta donde se encuentren los archivos pdf, En mi caso la unidad c:\archivos

1.- generar un bat desde genexus con los comandos necesarios para poder imprimir el archivo bat
2.- llamar a ejecucion desde genexus al bat creado en el paso anterior

3.- crear un segundo bat por defecto (osea lo crearemos a mano) y le llamaremos killer.bat la tarea de este bat sera cerrar el archivo una vez abierto.


Proceso
1.- generar un bat desde genexus con los comandos necesarios para poder imprimir el archivo

Generacion de bat con comandos necesarios
ok para esta parte lo que haremos sera tener un nuestro web form una variable llamada &NTIPE de tipo caracter de 10 (sera la caja de texto donde pongamos el nombre de mi archivo)
a continuacion contaremos con un boton llamado imprimir y su evento tambien sera imprimir.
Como podemos apreciar en el evento Start tendremos
Event Start
&UNID = 'C:\'
&tipe = '.BAT'
&NOMAR = 'ARCHIVO'
&ARCHIVO = RTRIM(&UNID)+RTRIM(&NOMAR)+RTRIM(&tipe)
EndEvent

Para que entiendan mejor detallo el tipo de cada variable del evento start:

&unid = caracter de 3
&tipe = caracter de 4
&nomar = caracter de 20
&Archivo = caracter de 15

Luego pasamos al evento del boton imprimri y figura lo siguiente:

Event 'imprimir' //boton imprimir
&i = DFWOpen(&ARCHIVO, ",",'')
&i = dfwptxt('call start /min AcroRd32.exe /n /s /h /t"'+&UNID+&NTIPE+'.pdf""Canon iR5000-6000 PCL5e"')
&i = dfwnext()
&i = dfwclose()
EndEvent

Para que entiendan mejor detallo el tipo de variable del evento imprimir que en este caso es solo una:
&i es de tipo numeric de 4

bueno ahora les explico la linea siguiente:

&i = dfwptxt('call start /min AcroRd32.exe /n /s /h /t"'+&UNID+&NTIPE+'.pdf""Canon iR5000-6000 PCL5e"')

lo mas importante de esta linea es:(si fuera posible copienla y peguenla como esta las comillas simples y dobles son importantes , luego reemplazen lo que tengan que reemplazar mas abajo explico que es lo que deben reemplazar)

'call start /min AcroRd32.exe /n /s /h /t"'+&UNID+&NTIPE+'.pdf""Canon iR5000-6000 PCL5e"'

esto se divide asi: (lo dividi en corchetes para que lo entiendan mejor y sepan que esta conformada por tres partes)

[call start /min AcroRd32.exe /n /s /h /t] [c:\miarchivo.pdf][nombreimpresora]

-el primer corchete [call start /min AcroRd32.exe /n /s /h /t] me indica que llamare a Acrobat reader con sus parametros para imprimir (ustedes respeten esta sintaxis sin los corchetes desde luego).

-el segundo corchete [c:\miarchivo.pdf] indica la unidad donde se encuentra mi archivo , el nombre de mi archivo y por ultimo el tipo(que en este caso sera pdf).

-el tercer corchete [nombreimpresora] definitivamente es la mas obvia el nombre de mi impresora simple.

al final todo el cuerpo de mi programa quedaria asi:

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Event Start
&UNID = 'C:\'
&tipe = '.BAT'
&NOMAR = 'ARCHIVO'
&ARCHIVO = RTRIM(&UNID)+RTRIM(&NOMAR)+RTRIM(&tipe)
EndEvent
Event 'imprimir'
&i = DFWOpen(&ARCHIVO, ",",'')
&i = dfwptxt('call start /min AcroRd32.exe /n /s /h /t"'+&UNID+&NTIPE+'.pdf""Canon iR5000-6000 PCL5e"')
&i = dfwnext()
&i = dfwclose()
EndEvent
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

bueno hasta este punto creamos un bat en la unidad c:\ con nombre ARCHIVO.BAT y con comandos necesarios para la impresion de un archivo pdf,si quieren comprobarlos lo ejecutan y verifican que en la unidad c:\ devio crear un archivo bat con el nombre ARCHIVO le dan click derecho y eligen editar podran observar los comandos creados , sin embargo nos falta ejecutar este bat creado.

2.- llamar a ejecucion desde genexus al bat creado en el paso anterior
Bueno yo tengo mis archivos pdf como les comente en c:\archivos\ y tengo un archivo en particular en esta carpeta que quiero imprimir ,se llama cuentas.pdf , lo que hare sera sencillo , utilizare un comando de Genexus que se llama shell para poder ejecutar archivos BAT . la sintaxis es la siguiente .

&n = shell('c:\ARCHIVO.bat',1)

donde &n es de tipo numeric de 4 , podran encontrar informacion sobre este comando en la pagina de Genexus.
Bien, en muchos casos y por cosas que no comprendo aun, este comando simplemente no funciona asi que , en particular lo resuelvo haciendo un llamado desde genexus a un procedimiento externo que me ejecute el bat . (yo trabajo con el lenguaje RPG asi que los procedimientos los cree alli y los utilizo en genexus, pero de corazon amigos espero que les funcione lo del shell por que si nos vamos por esto del procedimiento sera para que dedique otro apartado explicando lo de utilizar procedimientos externos y como me gusta ser detalloso en mis explicaciones no sera nada corto)


bueno echa la explicacion de como llamar a ejecucion el bat el codigo me quedaria asi:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Event Start
&UNID = 'C:\'
&tipe = '.BAT'
&NOMAR = 'ARCHIVO'
&ARCHIVO = RTRIM(&UNID)+RTRIM(&NOMAR)+RTRIM(&tipe)
EndEvent
Event 'imprimir'
&i = DFWOpen(&ARCHIVO, ",",'')
&i = dfwptxt('call start /min AcroRd32.exe /n /s /h /t"'+&UNID+&NTIPE+'.pdf""Canon iR5000-6000 PCL5e"')
&i = dfwnext()
&i = dfwclose()
do 'call_bat' //llamando a sub evento
EndEvent
Sub'call_bat'// sub evento que me ejecuta el bat
&n = shell('c:\ARCHIVO.bat',1)
load
EndSub
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.- Crear un segundo bat por defecto (osea lo crearemos a mano) y le llamaremos killer.bat la tarea de este bat sera cerrar el archivo una vez abierto.

Lo que pasa es que cuando se abre el documento pdf y lanza la impresion , todo sale perfect sin embargo hay un pequeño detalle que no he podido resolver aun , pero para el cometido de la solucion es aceptable y decente, la ventana del pdf no se cierra, es por ello que yo utilizo un bat que mata el proceso por asi decirlo, y una vez echo esto se cierra la ventana de pdf , simple y rapido.

Paso a detallar la construccion del Bat.

En un note pad escribo lo siguiente.

taskkill /f /im AcroRd32.exe

y luego lo guardo con el nombre de killer.bat , tomar atencion que lo guardo con extension ".bat"
cuando lo guarde y cierre el icono de mi notepad este se ha devido convertir en un icono de una ventanita con una tuerca , finalmete este archivo lo guardo en la unidad c:\ y luego lo llamo desde otro boton desde genexus utilizando otra vez el comando shell.

El codigo final quedaria asi:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Event Start
&UNID = 'C:\'
&tipe = '.BAT'
&NOMAR = 'ARCHIVO'
&ARCHIVO = RTRIM(&UNID)+RTRIM(&NOMAR)+RTRIM(&tipe)
EndEvent
Event 'imprimir'
&i = DFWOpen(&ARCHIVO, ",",'')
&i = dfwptxt('call start /min AcroRd32.exe /n /s /h /t"'+&UNID+&NTIPE+'.pdf""Canon iR5000-6000 PCL5e"')
&i = dfwnext()
&i = dfwclose()
do 'call_bat'
EndEvent
Sub'call_bat'
&n = shell('c:\ARCHIVO.bat',1)
load
EndSub
Event 'killer' // boton que mata el proceso
&m = shell('c:\killer.bat',1)
EndEvent
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Bueno estimados espero que les haya parecido interesante, cualquier comentario o duda la escriben en ,lo posible estare respondiendo .

Saludos
Atte.
Manuel
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

imprimir un archivo pdf que se encuentra en una unidad de forma directa, sin previsualizacion

Publicado por ezecozzi (9 intervenciones) el 25/06/2012 21:17:40
genial gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

imprimir un archivo pdf que se encuentra en una unidad de forma directa, sin previsualizacion

Publicado por Franklin (4 intervenciones) el 27/07/2012 07:20:05
Hola ayuda para ejecutar un achivo.pdf mediante un boton en genexus
la ayuda del sistema es un pdf por tanto necesito ejecutarlo cuando presione el boton ayuda..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

imprimir un archivo pdf que se encuentra en una unidad de forma directa, sin previsualizacion

Publicado por yaxira (24 intervenciones) el 09/05/2013 00:07:32
hola quisiera q se imrprima un formulario web de forma directa sin que me muestre el cuadro de dialogo de la impresora...gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar