Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Esperar por la impresión de un documento

Estas en el tema de Esperar por la impresión de un documento en el foro de Visual Basic clásico en Foros del Web. Hola. Bueno, la verdad es que me ha surgido un problema mayúsculo. He creado una aplicacioncita que tiene que imprimir una serie de documentos PDF ...
  #1 (permalink)  
Antiguo 10/11/2010, 09:43
Avatar de moniqa25  
Fecha de Ingreso: noviembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Esperar por la impresión de un documento

Hola.

Bueno, la verdad es que me ha surgido un problema mayúsculo.

He creado una aplicacioncita que tiene que imprimir una serie de documentos PDF con un bucle.

Bien, el caso es que comienza el bucle:
1 - mando imprimir el PDF con Acrobat Reader
2 - cierro el documento
3 - lo elimino del disco
vuelta a empezar.

La instrucción que utilizo para el paso 1 es:
ShellExecute hwnd, "print", strRutaFicheroPDF & "NombreFichero.pdf", vbNullString, vbNullString, 1

El problema es que, entre el paso 1 y el 2 necesitaría que el programa se detuviese, porque lo que está sucediendo es que se me cierra el documento antes de poderlo imprimir, dado que ShellExecute es asíncrono.

¿Sabeis de algún método que realmente funcione (y no valen timers)? Es que de veras que me siento incapaz de hacerlo.

Muchísimas gracias por vuestro tiempo.
  #2 (permalink)  
Antiguo 10/11/2010, 18:58
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Respuesta: Esperar por la impresión de un documento

Busca en google...
Visual Basic+Ejecutar DOS y esperar
  #3 (permalink)  
Antiguo 11/11/2010, 02:48
Avatar de moniqa25  
Fecha de Ingreso: noviembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Respuesta: Esperar por la impresión de un documento

Culd.

Si te fijas en mi código, verás que no quiero abrir un ejecutable, sino imprimir un documento.

No es tan sencillo. Abrir un ejecutable y esperar por él es fácil. Hacer lo que yo pregunto no y, en este caso, San Google no tiene (o yo no he sabido encontrar, aunque no me tengo por la más tonta de la clase) respuesta para ello.

Gracias en cualquier caso.

Un saludo.

Ah! los wait, sleep, etc. no mo sirven, que cada documento tiene un tamaño, el servidor y la red pueden estar más o menos ocupados, ...

Última edición por moniqa25; 11/11/2010 a las 02:51 Razón: Se me olvidaba un detallito.
  #4 (permalink)  
Antiguo 11/11/2010, 19:40
Avatar de culd  
Fecha de Ingreso: noviembre-2003
Mensajes: 959
Antigüedad: 21 años
Puntos: 19
Respuesta: Esperar por la impresión de un documento

Cita:
Iniciado por moniqa25 Ver Mensaje
Si te fijas en mi código, verás que no quiero abrir un ejecutable, sino imprimir un documento.
Cita:
Iniciado por moniqa25 Ver Mensaje
ShellExecute hwnd, "print", strRutaFicheroPDF & "NombreFichero.pdf", vbNullString, vbNullString, 1
Veo que no entendes lo que estas haciendo, supones algo y lo estas haciendo mal.

ShellExecute es una API de windows para ejecutar una instruccion, en este caso estas ejecutando el parametro "print" directamente sobre un archivo .pdf. En sintesis lo que hace es ejecutar ese archivo directamente con el programa que tiene asignada esa extension con el parametro PRINT, como el programa que tiene asignada esa extension es el Acrobat Reader, simplemente lo ejecuta con acrobar reader para su impresion.

Entonces, que estas haciendo con esa linea? EJECUTANDO un archivo con extension .PDF para su impresion.

Entonces lo que yo te dije te sirve perfectamente, ejecutar por DOS y esperar a que el proceso finalice.
  #5 (permalink)  
Antiguo 15/11/2010, 03:49
Avatar de moniqa25  
Fecha de Ingreso: noviembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Respuesta: Esperar por la impresión de un documento

Cita:
Iniciado por culd Ver Mensaje
Veo que no entendes lo que estas haciendo, supones algo y lo estas haciendo mal.

Entonces lo que yo te dije te sirve perfectamente, ejecutar por DOS y esperar a que el proceso finalice.
Veamos.... primero, creo que se perfectamente lo que trato de hacer, con la diferencia de que hablo de práctica y no de teoría (ni de tratar de solucionar algo recomendando una búsqueda en Google...).

En segundo lugar, por supuesto que se lanza un ejecutable cuando se manda imprimir un fichero. Así, puedes controlar que ese ejecutable está abierto pero NO si está imprimiendo ¿comprendes ahora? Yo se que acrord32 está abierto, pero no tengo la menor idea (porque VB6 no se entera) si está abriendo el fichero, mandándolo imprimir o si ha terminado de hacerlo. Si tú eres capaz y, además, explicarlo sin poner una búsqueda para Google, es que puedes ayudar. Sino, por favor, no insistas.

Un saludo y, por favor, dime que sabes cómo hacerlo.
  #6 (permalink)  
Antiguo 15/11/2010, 05:19
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Esperar por la impresión de un documento

La mejor solución que se me ocurre es controlar la cola de impresión.

En este artículo tienes el código para ello.

http://support.microsoft.com/kb/202480/es

Creo que solo tienes que esperar a que en el text3 aparezca el nombre del archivo enviado a la impresora, (o algo asi, no he hecho pruebas por falta de impresora).

Suerte
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #7 (permalink)  
Antiguo 16/11/2010, 08:54
Avatar de moniqa25  
Fecha de Ingreso: noviembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Respuesta: Esperar por la impresión de un documento

Buena sugerencia, pkj.

Voy a hacer unas pruebillas y te digo algo. Si no termino en el psiquiátrico, termino imprimiendo, soy cabezota.

Muchísimas gracias, de veras.
  #8 (permalink)  
Antiguo 23/11/2010, 03:54
Avatar de moniqa25  
Fecha de Ingreso: noviembre-2007
Mensajes: 10
Antigüedad: 17 años
Puntos: 0
Respuesta: Esperar por la impresión de un documento

Hola de nuevo, pkj.

Al fín he podido volver un poco atrás en el proyecto para comprobar el código que me has facilitado.

La aplicación es una pasada, permite controlar todos los parámetros de la impresora, peeeeeeero.

Siempre hay un pero ¿verdad?

Si lanzo una serie de documentos pdf a imprimir, VB procesa tan rápido cada instrucción de impresión que aún ni siquiera se ha abierto Acrobar Reader para imprimir el primero de ellos y VB está procesando el, por ejemplo, decimotercer documento.

Quizá una solución sería crear un bucle tras la instrucción de impresión que diga que, mientras no esté en cola el primer documento (que no imprimiendo, porque puede tener 1000 documentos de otros usuarios por delante al ser una impresora en red), espere. Y una vez entre en cola, que prosiga la ejecución. Y es lo único que se me ocurre, la verdad, (estoy en ello, y parece que la cosa funciona).

En fín, que la cosa era dificililla y puede que esto llegue a servir.

Te agradezco la colaboración, porque me has servido de mucha ayuda.
  #9 (permalink)  
Antiguo 23/11/2010, 06:09
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 18 años, 3 meses
Puntos: 29
Respuesta: Esperar por la impresión de un documento

Me alegro de haberte dado aunque solo sea un empujoncito en la dirección correcta.

He probado el tema pero no he conseguido encontrar donde se ve si el fichero se ha añadido ya a la cola de impresión. El bucle que comentas sería lo más simple si has conseguido encontrar eso.

También he estado mirando ShellExecuteEx, y aparte de que solo funciona en S.O. de XP para arriba, y de que la cosa es bastante complicada, el resultado al imprimir me ha parecido el mismo, aunque tiene un parámetro NOASYC o algo asi que se supone que le obliga a esperar la ejecución del programa, pero en las pruebas el mensaje de "enviado" me sigue apareciendo antes que el fichero en la cola de impresión, al igual que usando ShellExecute, de modo que no me ha convencido mucho.

Quizá se pueda hacer que el acrobat se cargue minimizado la primera vez y sin cerrarse reciba los documentos que le vayas mandando más rápidamente. Con el último documento se le mandadría cerrarse y ya está. Igual los ShellExecute's permiten esto...

Suerte.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Etiquetas: documento, esperar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:16.