Si son como yo, odian mandar a imprimir, ya que lo usan rara vez.
Por eso me he hecho una clase para usar fácil:
Imprimir en una linea de código con mi clase Printer
Atención: Los comentarios abajo de este artículo son épicos e incluyen muchos cambios y mejoras. Si quieres ser un maestro de AS3 o por lo menos aprender más, sin duda léelos.
Código :
package com.clases.utils { import flash.display.MovieClip; import flash.events.*; import flash.net.*; import flash.printing.*; public class Printer { private var print_job:PrintJob = new PrintJob(); private var options:PrintJobOptions = new PrintJobOptions(); private var result:Boolean = print_job.start(); function Printer(Page:MovieClip) { if (result) { print_job.addPage(Page, null, options); print_job.send(); //delete print_job; }else { trace("ERROR"); } } } }
La clase se usa realmente fácil:
Código :
new Printer(MC);
Y ya, les enviará el documento a imprimir. MC es, obviamente, el MovieClip a imprimir. Lo pueden reemplazar en el código por cualquier DisplayObject.
Saludos, Hernán . -
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Maikel el 24 de Septiembre de 2010
saludos
Por Freddie el 24 de Septiembre de 2010
Maikel :
Se ve mucho mejor
Código :
queCódigo :
No siempre necesitarás todo de FuncionesGenericasDeMaikel, a veces sólo necesitas Printer.
Por Martincho7 el 24 de Septiembre de 2010
Gracias
Por Deivtox el 24 de Septiembre de 2010
Por Maikel el 24 de Septiembre de 2010
Freddie :
Maikel :
Entiendo lo que quieres decir y acepto tu argumento, probablemente yo hubiese hecho algo similar en ese caso.
Lo que no concibo es que el constructor mande a imprimir de una vez antes de interactuar de alguna forma con el objeto. Creo que los dos estaríamos de acuerdo en que algo como esto seria más aceptable:
Código :
De esta forma, si quiero sacar una nueva versión de mi clase (agregar más funcionalidades a mi clase) podría hacerlo sin ningún problema y respetaría el comportamiento original de las versiones anteriores.
saludos
Por Hernán el 25 de Septiembre de 2010
Código :
Y ya! Esto es muy similar, quieres imprimir algo y haces:
Código :
Me parece más fácil de usar para objetivos muy directos. No justifico siempre eso, pero es inutil hacer dos líneas cuando puedes resolver en una y más fácil de usar. Así uso solo algunas clases, como mi clase delay o Playback .
Saludos, Hernán . -
Por Clark el 25 de Septiembre de 2010
perdón no me aguante las ganas de comentar
Por Dano el 25 de Septiembre de 2010
Le hice unas correcciones a la clase, básicamente:
Si no usas la instancia para nada, lo mejor es usar un método estático.
Las propiedades de clases son para variables usados en diferentes partes de la clase, las variables locales de una función solo viven en lo que dura la llamada al método, en tu caso requieres que sean variables del método no de la clase.
No tiene ningún sentido crear una instancia para una línea. Con mi cambio la utilería sigue quedando en una clase por aquello que comentaban de portabilidad, pero esta mejorado el "how to".
Saludos
Código :
Esta llamada se ve mas c00l, y funciona como el ejemplo que decian de Tween, que aplican lo mismo que yo dije:
Código :
Por eldervaz el 25 de Septiembre de 2010
a ver, tener una instancia de una clase que sólo se ejecuta una vez es malo?
Yo no lo veo así, usar una clase para un solo propósito y después eliminarla es una de las mejores prácticas que existe, si no usarás la instancia siempre quedará la opción de eliminarla.
Por el contrario, aunque yo soy muy partidario de los singleton, en este caso lo veo un poco extraño, recuerden que los singleton consumen demasiados recursos, se queda en memoria y es escuchado en todas las instancias del proyecto (puaj eso me hace recordar a las malignas: _global)
Pero como en todo, no puedo dar un veredicto final de que es mejor, porque siempre habrá que decir: DEPENDE
Si tu app lo requiere, y tienes la necesidad de siempre imprimir, lo veo viable en un singleton, pero sino un command es perfecto, se crea, se usa y se destruye, fin.
Por Hernán el 25 de Septiembre de 2010
Saludos, Hernán . -
Por Dano el 25 de Septiembre de 2010
eldervaz :
a ver, tener una instancia de una clase que sólo se ejecuta una vez es malo?
Yo no lo veo así, usar una clase para un solo propósito y después eliminarla es una de las mejores prácticas que existe, si no usarás la instancia siempre quedará la opción de eliminarla.
Por el contrario, aunque yo soy muy partidario de los singleton, en este caso lo veo un poco extraño, recuerden que los singleton consumen demasiados recursos, se queda en memoria y es escuchado en todas las instancias del proyecto (puaj eso me hace recordar a las malignas: _global)
Pero como en todo, no puedo dar un veredicto final de que es mejor, porque siempre habrá que decir: DEPENDE
Si tu app lo requiere, y tienes la necesidad de siempre imprimir, lo veo viable en un singleton, pero sino un command es perfecto, se crea, se usa y se destruye, fin.
Y quien habló de Singleton eh?
Creo que hace falta un BUEN tutorial de OOP en clab.
Por Dano el 25 de Septiembre de 2010
Para lo que se busca, lo que recomiendo es lo más óptimo pero por lo que se expresa veo claramente que hace falta un buen tutorial de OOP. Mira que confundir un método estático con el patrón Singleton lo demuestra.
Igual el uso de instancias cuando no es necesario. Yo no dije que usar una instancia es malo, lo malo es crear una instancia cuando para nada es necesario.
Por eldervaz el 26 de Septiembre de 2010
vale la aclaración.
Por Hernán el 26 de Septiembre de 2010
eldervaz-blog :
vale la aclaración.
Je, a mi también me pareció
Por eldervaz el 26 de Septiembre de 2010
My two cents.
Por Dano el 26 de Septiembre de 2010
Responder con aish... y por como se responde, luego se nos ofenden que se les responda igual.
A Hernán yo inicie primero que nada agradeciendo el aporte y luego explicando porque lo cambie, no creo que Hernán tenga queja de que le respondí mal, a ti te respondí diferente porque llegasta a opinar MUY diferente.
De que te sirve un certificado cuando no pueden detectar un patrón, a simple vista, no había absolutamente nada relaciondo a Singletón, por mas rápido que se vea el code, yo no confundiría tan feo un patrón. De que sirve tener un certificado si no puedes detectar un patrón tan básico como el Singletón? Y de hecho no confundiste un solo patrón, confundiste dos, te dejo de tarea cual.
Si quieren respeto hablen con respeto.
Por eldervaz el 26 de Septiembre de 2010
Estos niños de ahora.
Por eldervaz el 26 de Septiembre de 2010
Por Dano el 26 de Septiembre de 2010
Ya estas metiendo muchos temas que ni al caso.
No voy a seguir con una discusión sin sentido.
De mi parte ya corregí lo que tenía que corregir.
Por Dano el 26 de Septiembre de 2010
Por el contrario, eres un claro ejemplo que puedes tener certificaciones de instructor adobe, pero eso no implica una garantía total de que vas a estar en el entendido de los temas.
pd. No deberías meter a tu novia en estos temas, porque yo si tengo respeto, me abstengo de comentar algo al respecto.
Por eldervaz el 26 de Septiembre de 2010
Y al parecer si tienes problemas con eso de la implementación. Cuando gustes te enseño cuando debes o no usar un final, una clase estática vs una clase y diferenciarlas de las públicas y privadas, tu diviértete por lo pronto, no todos entienden el AVM1 o AVM2 como es tu caso, relax maestro de maestros.
...aish!
Por Freddie el 26 de Septiembre de 2010
Por eldervaz el 26 de Septiembre de 2010
Estos niños insolentes que no le han ganado a nadie, en fin.
Fin.
Por cierto, aish!
Por Maikel el 26 de Septiembre de 2010
Ni idea que tiene que ver los patrones de diseño con mi comentario.
Además, creo que Hernan acepto implícitamente mi comentario pues Dano le demostró de una manera por qué yo le decía eso y le gusto la implementación de él.
saludos
Por Dano el 26 de Septiembre de 2010
Freddie :
Como comenté por ahí, de mi lado no voy a seguir con esta discusión sin sentido. Ya dije y corregí los conceptos que tenía que corregir por aqui
Saludos
Por eldervaz el 26 de Septiembre de 2010
Por Dano el 26 de Septiembre de 2010
eldervaz-blog :
Y dale con que no han ganado nada, van tres o cuatro veces que lo mencionas. No solo faltan 3 líneas, sigues demostrando lo poco que conoces del tema(a la hora de lo práctico no hay certificado que te salve).
No tengo que andar presumiendo donde y para que trabajo, pero no creas que eres el único que puede ganar cosas y trabajar en empresas importantes. En verdad que como se ve que te duele que te corrijan, creo que tu problema de personalidad es mas grave que tu falta de conocimiento en OOP.
Por eldervaz el 27 de Septiembre de 2010
a ver, veamos niño:
1. Yo me corregí porque vi un singleton, fue mi error darle una pasada muy rápida a tu código, lo admito y me corrijo, ok? no hay de malo en tener un error de lectura veloz por tu código.
2. Tu respuesta, de lo más altanera, causo algo que era más simple decir: hey elder, mira bien, no es lo que dices.
3. Después tu niñería continuó al faltarme el respeto. Pensando que un "aish" era una expresión de burla o dolor o menosprecio.
4. Para nada me molestó que me digas que no era un singleton, por eso puse inmediatamente, es cierto, vi rápido y obvio, me equivoqué.
5. En ningún momento hablé de que yo era o no certificado, simplemente fue en todo de sarcasmo, porque también te dije: maestro de maestros, ofendiendo claro, a los que realmente saben OOP.
6. Después te dolió que te comentara que no sabes implemetar un final, no sabes trabajar con AVM2 y no tienes puta idea de como usarlo. Muy aparte que no sabes cuando y porque usar una clase estática.
7. Lastimosamente tus problemas de inferioridad te llevan a pensar en el resto.
Déjate de niñerías y cuando quieras conversar conmigo, se más hombrecito y me lo dices por chat o por voz o cuando esté en tu ciudad me buscas.
Finalmente, como eres tan PRO y hablaste tan mal del tema de la certificación, que obviamente te duele no tener:
TE RETO
si leíste bien: TE RETO
a que des el examen y difundamos tus respuestas, te reto, yo te pago el examen de certificación, te pago el taxi y te pago las horas de trabajo (por 2) que no estés laborando, veamos entonces que tanto hablas, TE RETO a dar tu examen de certificación en Flex 4 y que divulgues la nota en OOP.
Se un poco más hombre y déjate de niñerías y aprende a no faltar el respeto.
Y por cierto, yo no te estoy presumiendo nada, por que si lees bien tu comentario agresivo y ofensivo, eres tu el que lo hace.
Bien, cuando das tu examen de Flex4? o si quieres de AS que es más fácil, yo lo pago.
Por Dano el 27 de Septiembre de 2010
Si tienes alguna pregunta técnica que me quieras hacer con gusto la respondo(y no lo digo con ironía), y que como instructor sabes es parte de la certificación Flex 3(lo siento para el 4 no me he metido como quisiera y no lo mencioné), sino para dejar abierto que te des cuenta el mucho o poco conocimiento que un "desconocido" para ti, pueda tener. No tengo ningún problema con eso.
Creo que de tu parte, lo que noto es no aceptar que alguien "desconocido" allá dicho que algo estaba mal.
No vi nada de Singleton y ni cercano, falta el getInstance, la propiedad para guardar la instancia, en el constructor la validación para evitar que se instancia por fuera, en la invocación llamarlo, eran muchos detalles los que faltaban como para confundir con Singleton, por eso dije que no tenía que relación, y por eso expuse no lo veía al caso, no respondí de la mejor forma, lo sé y lo acepto, pero porque tampoco vi tu respuesta de la mejor manera.
Por eldervaz el 27 de Septiembre de 2010
a ver, tener una instancia de una clase que sólo se ejecuta una vez es malo?
Yo no lo veo así, usar una clase para un solo propósito y después eliminarla es una de las mejores prácticas que existe, si no usarás la instancia siempre quedará la opción de eliminarla.
Por el contrario, aunque yo soy muy partidario de los singleton, en este caso lo veo un poco extraño, recuerden que los singleton consumen demasiados recursos, se queda en memoria y es escuchado en todas las instancias del proyecto (puaj eso me hace recordar a las malignas: _global)
Pero como en todo, no puedo dar un veredicto final de que es mejor, porque siempre habrá que decir: DEPENDE
Si tu app lo requiere, y tienes la necesidad de siempre imprimir, lo veo viable en un singleton, pero sino un command es perfecto, se crea, se usa y se destruye, fin.
Listo, solo borré esa palabra y creo que asunto resuelto. Retiro cada una de las palabras ofensivas que he puesto aquí y que veré si F lo puede eliminar.
Solo te reitero Dano, mi único error fue pasar rápidamente por tu código y si, aun ahora, con todo eso que has mencionado que haría la diferencia en un singleton pues no sería más de unas cuantas líneas más y todos, aquí, lo sabemos.
Por otro lado, mi reacción no fue que me corrigieras, seas o no un desconocido, me da igual, ni tu, ni yo, ni nadie aquí es suficientemente PRO en un tema así lo haya estudiado por años, es por eso que escribí:
eldervaz-blog :
vale la aclaración.
Te das cuenta? en ningún momento te agredí o hablé mal.
Sólo es eso Dano. Retiro lo dicho y pido disculpas si te ofendí y cerrado el tema.
Fin.
Por Dano el 27 de Septiembre de 2010
Saludos
Por Hernán el 27 de Septiembre de 2010
Anecdoticamente, yo estaría aquí discutiendo lo mismo Dano, salvo que cuando escribí mi post respondiéndote, me dí cuenta que estaba mal expresado y al re-leerlo me "salve" de no expresarme bien. MUCHAS veces nos pasa !
Aún así, interesante debate, creo ha aportado y no desvirtuado el post. Muy interesante de leer incluso.
Saludos, Hernán . -
Por Otaku RzO el 27 de Septiembre de 2010
Bravo!
Por elchininet el 27 de Septiembre de 2010
Una implementación buena de la clase sería que se le pudiera enviar cualquier DisplayObject y en caso de no ser un Sprite o no heredar de él, entonces hacer una copia del mismo, añadirlo a un Sprite e imprimirlo (muchas veces para que imprima correctamente el Sprite debe estar añadido a la DisplayList).
Por Freddie el 27 de Septiembre de 2010
Hernán :
Ambos se fueron al carajo en varios puntos de la conversación. No discutiré quien más o quien menos. Pero la falta de perspectiva y humildad me hizo ir personalmente a querer hacerlos ver razones a ambos.
Me alegro que hayan llegado a una resolución pacifica, lógica e ingeniereable (Achievement unlocked: Palabra inventada).
elchininet :
Por vanvanero el 27 de Septiembre de 2010
Por Samy el 27 de Septiembre de 2010
Por suspirito el 27 de Septiembre de 2010
Por elchininet el 28 de Septiembre de 2010
Hernán :
Mi mala costumbre de leer rápido y no seguir los comentarios me apartó totalmente del tema, yo hablando de la clase y resulta que el tema iba por otro lado. Pues bien, entrando en el tema, estoy seguro de que ambos dijeron muchas cosas que en realidad no quisieron decir y escribieron cosas de las que ahora se arrepienten, increíblemente en el tema de una respuesta en un foro, van más rápidos los dedos en el teclado aunados con un subidón de ira repentino que lo que puede procesar nuestro cerebro. Aconsejo a ambos, y lo digo por experiencia propia, que muchas veces es mejor escribir, leer, volver a leer y estar seguro de lo que vas a decir, pues lo que digas se quedará indefinidamente en este espacio virtual y quizás no refleja realmente lo que deseaste expresar.
Freddie :
Si Hernán me lo permitiera y es una implementación que la comunidad considere útil (era meramente mi opinión) le aportaría algo más a la clase, pero viendo como anda el ambiente prefiero quedarme en el comentario.
Por Hernán el 28 de Septiembre de 2010
elchininet :
Por favor, cualquier aporte será bien recibido. No temas no estamos en "guerra", no pasará nada. Si quieres y puedes, me gustaría ver el aporte de tu propuesta para integrar mejor la clase.
Saludos, Hernán . -
Por elchininet el 28 de Septiembre de 2010
Hernán :
Saludos, Hernán . -
Me alegra oirlo, voy a implementarle lo que comentaba.
Un saludo
Por elchininet el 28 de Septiembre de 2010
Código :
La clase acepta 3 parámetros que por defecto tienen valores:
Código :
adjustToPage Si es true los objetos a imprimir se ajustarán al tamaño de la página, si es false se imprimirán a su tamaño natural.
printAsBitmap Si es true los objetos se imprimirán como Bitmap (los objetos que no sean Sprites o heredados de Sprite se imprimirán siempre como Bitmap)
bitmapQuality Calidad del Bitmap, básicamente lo que hace es hacer un Bitmap tantas veces mayor que el DisplayObject original (sólo se aplica cuando los objetos a imprimir no sean Sprites)
La clase tiene propiedades públicas para tomar o asignar dichos parámetos.
Cuando se deseen imprimir una serie de DisplayObjects se debe llamar al método público print
Código :
Por ejemplo los Sprites y MovieClips serán impresos tal como son, los demás DisplayObjects se hará una copia Bitmap de los mismos, se añadirán a un Sprite y se imprimirán. Cada DisplayObject se imprimirá en una página independiente.
Funcionalidades que sería interesante implementar
Posibilidad de escoger la orientación del papel.Que los objetos impresos con rotación o escalados se impriman correctamente (la clase actualmente asume que el objeto no tendrá ninguna transformación de este tipo)
Si alguien encuentra una forma de optimizar el código o de implementar nuevas funcionalidades, será bienvenido de la misma forma que Hernán me dio permiso para variar su código.
Por elchininet el 28 de Septiembre de 2010
El código resultante:
Código :
Se elimina el parámetro y la propiedad bitmapQuality y de esta forma queda más limpio creo, si alguien se le ocurre como seguir optimizándolo será bienvenido.
Por Hernán el 28 de Septiembre de 2010
Me gustó la forma en que implementaste.
Saludos, Hernán . -
Por Otaku RzO el 28 de Septiembre de 2010
@hernan pero puedes dividir la clase en 2: PrinterBasic y PrinterAdvance (que extendería de PrinterBasic).
Por elchininet el 28 de Septiembre de 2010
Por otro lado he notado una irregularidad en el código:
Código :
Si se recorre el Array de objetos typeando la variable a DisplayObject, ¿para que hacer un chequeo después verificando que sea un DisplayObject?
Lo mejor sería:
Código :
Así, si se le envía a la clase entre los parámetros un objeto que no sea un DisplayObject (por ejemplo BitmapData) será ignorado y se imprimirá el resto.
Por Otaku RzO el 28 de Septiembre de 2010
Código :
Código :
Como notarán en la función print de la clase base seguí usando la opción de multiples parametros y es lo único que hace ver más grande esa clase, pero cumple su cometido.
Lo que podría agregarse es una función destroy para liberar la instancia de PrintJob porque sólo se puede instanciar una vez en la aplicación o quizás esta desaparesca al liberar la instancia de la clase usada (Printer o PrinterAdvance), esto último no lo he probado.
Por Hernán el 29 de Septiembre de 2010
Saludos, Hernán . -
Por bipsa el 29 de Septiembre de 2010
eldervaz-blog :
Lo único que me quedó claro después de leer todo este post es que eldervaz tiene una ortografía pésima.
hago quote de algo más que el menciona aquí.
eldervaz-blog :
Saludos
Por Maikel el 29 de Septiembre de 2010
PD: tenias tiempo sin visitar por aqui bipsa.
saludos
Por bipsa el 29 de Septiembre de 2010
bueno ahora voy a tratar de participar un poco más.
Saludos Maikel
Por Hernán el 29 de Septiembre de 2010
bipsa :
hago quote de algo más que el menciona aquí.
Generalmente cuando alguien pone comillas a una palabra es para resaltar algo, si escribo "vien", lógicamente estoy dando por implicito que sé del error y quería que así fuera, sea cual fuere mi razón.
Como nota, el post había llegado a un punto donde NO era necesario ningún tipo de aclaración, en especial siendo que Dano y Elder se pusieron de acuerdo y el tópico siguió.
Por elchininet el 29 de Septiembre de 2010
Un saludo
Por lucasmoyanoar el 29 de Septiembre de 2010
me parece sumamente útil, a la hora de imprimir algo en flash siempre reniego
Por bipsa el 29 de Septiembre de 2010
Por Hernán el 30 de Septiembre de 2010
bipsa-blog :
Please, no escribas más post sin aporte. Eres bienvenido a comentar en cosas útiles. Por favor.