la opción que presenta elecash es buena... Siempre y cuando lo que vayas a imprimir ya se encuentre listo antes de mandar el my_pj.start();
Sucede que yo necesito generar un reporte basado en previa búsqueda por parte del usuario. El resultado de dicha búsqueda (por PHP), lo almaceno en un array en AS. Previamente, tengo un movieclip llamado "Impresion_mc" en donde tengo el formato que deben de llevar los datos una vez impresos.
Como ya se están imaginando, tengo un ciclo en donde lleno los datos en "Impresion_mc", mando la instrucción addpage, vuelvo a llenar los datos y así sucesivamente, hasta terminar con el último registro dentro de mi array de resultados.
La decepción?... ¡No se alcanzan a refrescar los datos antes de que se mande a imprimir la página!.
Implementé el ciclo con el "onEnterFrame", para asegurar una pequeña pausa antes de la instrucción addPage, pero solo me funciona para la primer página... al parecer se pierde la variable en el siguiente "onEnterFrame".
No he podido declarar una variable PrintJob fuera de la función que manda a llamar el PrintJob, pues la ignora, no se abre el cuadro de diálogo de impresión cuando llamo a my_pj.start();
De hecho, la ayuda en flash indica que los datos deben de estar previamente formateados antes de tratar de imprimir, de lo contrario no se te asegura que se ejecuten las instrucciones antes de que se agrege esa página modificada a la cola de impresión.
Alguna idea al respecto?
Mis dos soluciones (bastante chafas):
1.-
El siguiente algoritmo funciona, pero es molesto para el usuario porque tiene que hacer tantos clicks como páginas que mande a imprimir. Se apoya en un OnEnterFrame que da una pequeña pausa antes de cambiar la variable Pausa a false:
Imprimir_btn.onRelease = function(){
Formatea Impresion_mc
Pausa = true;
};
this.onEnterFrame = function(){
si (!Pausa && Datos_array.length > Datosenviados){
var my_pj:PrintJob = new PrintJob();
my_pj.start();
my_pj.addPage("Impresion_mc", null, null, 3);
my_pj.send();
delete my_pj;
Formatea Impresion_mc
Pausa = true;
cont = 0;
}
if (Pausa && cont < 5){
cont++;
} else{
Pausa = false;
}
}
2.-
La siguiente solución sería hacer copias de "Impresion_mc" en tiempo de diseño, implementar un algoritmo que llene dichas copias con los datos del array de resultados, realizar solo una pausa (con la ayuda del OnEnterFrame) y mandar a imprimir las movieClip pertinentes. Pero esto tiene la GRAN DESVENTAJA de limitar el número de hojas impresas que puede generar un reporte
.
Alguna sugerencia al respecto?
P.D.: tembièn intenté hacer un escrito super largo y mandarlo a imprimir, pero la salida de impresión está limitada a las dimensiones del escenario, por lo que tampoco resultó my gran idea.