Crear archivo en AIR con Flex Builder 3
Adobe AIR permite a los desarrolladores web, crear aplicaciones de escritorio con todo lo que una aplicación web puede proveer. Estas aplicaciones pueden ser ejecutadas en cualquier sistema operativo. Para instalar AIR necesitas tener instalado el Flex Builder 3 (o bien bajarte el SDK de Adobe AIR). En esta entrada aprenderemos a crear un archivo HTML con Adobe AIR.Puedes bajarte una versión de prueba del Flex Builder 3 aquí. Además, deberás bajar Adobe AIR de aquí. Una vez instalado estas dos aplicaciones inicia Flex Builder y haz click en el menú File -> New -> Flex Project. Te aparecerá una ventana en la cual deberás establecer el nombre del proyecto y el tipo de aplicación. En este caso deberás seleccionar la opción de Desktop application (runs in Adobe AIR). Como nombre de proyecto le pondremos AIRCreateFile.
Después de poner los datos anteriores y de hacer click en el botón de Finish, observarás del lado derecho (Flex Navigator) la lista de archivos y proyectos que tenemos dentro de Flex Builder. El icono rojo al lado del nombre del proyecto inidica que se trata de un proyecto de Adobe AIR. Dentro de la carpeta src (source) se almacenarán los archivos de nuestro proyecto, si observas, el programa Flex ya nos creó nuestro primer archivo (el cual será el punto de arranque de la aplicación) el cual se llama igual que nuestro proyecto.
Adobe AIR no sólo nos creo el archivo AIRCreateFile.mxml sino que también nos lo abrió (en la ventana grande de la derecha) y está listo para que empecemos a programar.
Como puedes observar en el código, el componente WindowedApplication es el componente padre de nuestra aplicación en AIR. Dentro de estos tags <WindowedApplication> y </WindowedApplication> debemos escribir todo nuestro código. Comenzaremos haciendo unos cambios al diseño de la aplicación, posteriormente veremos el código necesario para crear el archivo y cargarlo con el componente HTML de Adobe AIR.
Si observas la imagen anterior, arriba del editor de código está el botón de Source (Fuente) y el botón de Design (diseño). Ahorita estamos en la vista del código fuente, por lo tanto el botón de Source está activado. Para realizar los cambios en el diseño de la aplicación lo haremos directamente desde la vista Design, por lo tanto da click en ese botón. Al darle click al botón de diseño, los paneles laterales cambian (En esta vista podemos ver del lado derecho el panel Flex Properties (Propiedades de Flex), el panel States (Estados), Components (Componentes), entre otros. En el panel Style, dentro de la sección Fill, al hacer click en el primer botón (el de una cubeta de pintura) podemos cambiar el color de fondo de la aplicación. Para este ejercicio cambia el botón de fondo a blanco (#FFFFFF).
En el panel Components dentro de la sección de Controls, arrastra al área de diseño el item que dice Label. Da click sobre él y escribe "Crear archivo HTML en AIR"; dale el formato que quieras y dentro de la sección Layout del panel de propiedades da click en el botón de enmedio horizontal que está debajo de Constraints. Este botón permite que la etiqueta (Label) que acabamos de poner siempre está centrada horizontalmente cuando se ejecuta la aplicación.
En el mismo panel de componentes, se encuentra como penéltima categoría los componentes de Adobe AIR, busca el componente HTML y arrástralo al área de diseño. Selecciona el componente que acabas de arrastrar y pon los siguientes valores en la sección de Layout del panel de propiedades:
Da click en el botón de Source y observa cómo Flex Builder fue creando el código referente a los cambios de layout y diseño del archivo mxml. Como esta va a ser una pequeña aplicación de ejemplo, vamos a poner todo el código en este archivo; sin embargo, es recomendable para aplicaciones más grandes tener nuestro código organizado en clases y archivos .AS para poder reutilizarlos y para poder actualizarlos fácilmente cuando se requieran cambios. Agrega estos elementos a los siguientes tags:
-
/* Una vez que se haya creado la ventana de la aplicación, se mandará a llamar la función init(); */
-
<mx:WindowedApplication creationComplete="init();"
-
/* Le estamos asignando el id de HTMLLoader al componente HTML */
-
<mx:HTML id="HTMLLoader"
Dentro de los tags <WindowedApplication> introduce esta línea de código y presiona la tecla Enter:
-
<mx:Script>
Verás que Flex Builder te completará el código cerrando el tag:
Dentro del CDATA de nuestro tag Script deberá ir todo nuestro código ActionScript que necesitemos. Para poder crear un archivo desde AIR necesitamos importar la librería File:
-
// Importar las siguientes librerías:
-
import flash.filesystem.File;
-
import flash.html.HTMLLoader; // Esta librería la usaremos más adelante para mostrar en nuestra aplicación el archivo HTML que generamos
Además, crearemos estas variables que usaremos más adelante:
-
private var _encodeType:String = "iso-8859-1"; /* Tipo de codificación para que nos permita acentos en el archivo */
-
private var stream:FileStream = new FileStream(); /* Estamos declarando una variable de tipo FileStream para poder crear y escribir en el archivo */
Debajo del código anterior escribe las siguientes funciones:
-
/* Esta es la primera función que mandamos a llamar en creationComplete */
-
public function init() {
-
this.maximize(); /* Cuando ejecutamos la aplicación la ventana estará maximizada */
-
var htmlFile:File = new File(File.applicationStorageDirectory.nativePath + "/miArchivo.html"); /* Una referencia al archivo HTML que vamos a crear, en ese caso nuestro archivo se llamará miArchivo.html */
-
if(stream != null) { /* Si ya existe un stream abierto hay que cerrarlo */
-
stream.close();
-
}
-
stream = new FileStream();
-
stream.open(htmlFile, FileMode.WRITE); /* Abrimos el archivo en modo de escritura */
-
stream.addEventListener(IOErrorEvent.IO_ERROR, writeIOErrorHandler); /* Asignamos un listener al stream para ver si hubo error de lectura o escritura de archivo */
-
-
stream.writeMultiByte(getFirstTags(), _encodeType); /* Escribimos en nuestro archivo el texto (que en nuestro caso es el código HTML de nuestro ejemplo) que nos regresa la función getFirstTags() declarada más adelante, con codificación ISO para los acentos */
-
stream.writeMultiByte(getDataTable(), _encodeType); /* Escribimos en nuestro archivo el texto que nos regresa la función getDataTable */
-
stream.writeMultiByte(getEndTags(), _encodeType); /* Escribimos en nuestro archivo el texto que nos regresa la función getEndTags*/
-
-
stream.close(); /* Cerramos nuestro stream */
-
-
HTMLLoader.location = File.applicationStorageDirectory.nativePath + "/miArchivo.html"; /* Mostramos en el componente HTML el archivo que acabamos de crear */
-
}
-
public function getFirstTags():String {
-
var _texto:String = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n' +
-
'<html xmlns="http://www.w3.org/1999/xhtml">\n' +
-
'<head>\n' +
-
'<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />\n' +
-
'<title>Crear archivo HTML en Adobe AIR</title>\n' +
-
'<style>\n' +
-
'body {\n' +
-
' font:Arial, Helvetica, sans-serif;\n' +
-
' font-family:Arial, Helvetica, sans-serif;\n' +
-
' font-size:12px;\n' +
-
' margin-left:30px;\n' +
-
'}\n' +
-
'hr.Ruler {\n' +
-
' margin-left:-20px !important;\n' +
-
' color:#003366;\n' +
-
' border:1px solid #003366;\n' +
-
' background-color:#003366;\n' +
-
' width:800px;\n' +
-
'}\n' +
-
'.Estilo3 {\n' +
-
' color: #993300;\n' +
-
' font-weight: bold;\n' +
-
' font-size: 14px;\n' +
-
'}\n' +
-
'.Estilo4 {font-size: 12px; color: #666666;}\n' +
-
'a:hover, a:link, a:visited, a:active {font-size: 12px; color: #666666; text-decoration:none; }\n' +
-
'.Tabla_Datos td {\n' +
-
' height:25px;\n' +
-
'}\n' +
-
'</style>\n' +
-
'</head>\n' +
-
'<body>\n';
-
return _texto;
-
}
-
-
private function getEndTags():String {
-
var _texto:String = '</body></html>';
-
return _texto;
-
}
-
-
private function writeIOErrorHandler(event:Event):void {
-
trace("Error al abrir o escribir el archivo");
-
}
¿Te perdiste? No te preocupes, aquí va el código completo:
-
<![CDATA[
-
import flash.filesystem.File;
-
import flash.html.HTMLLoader;
-
-
private var _encodeType:String = "iso-8859-1";
-
private var stream:FileStream = new FileStream();
-
-
public function init() {
-
this.maximize();
-
-
var htmlFile:File = new File(File.applicationStorageDirectory.nativePath + "/miArchivo.html");
-
if(stream != null) {
-
stream.close();
-
}
-
stream = new FileStream();
-
stream.open(htmlFile, FileMode.WRITE);
-
stream.addEventListener(IOErrorEvent.IO_ERROR, writeIOErrorHandler);
-
-
stream.writeMultiByte(getFirstTags(), _encodeType);
-
stream.writeMultiByte(getDataTable(), _encodeType);
-
stream.writeMultiByte(getEndTags(), _encodeType);
-
-
stream.close();
-
-
HTMLLoader.location = File.applicationStorageDirectory.nativePath + "/miArchivo.html";
-
}
-
-
public function getFirstTags():String {
-
var _texto:String = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n' +
-
'<html xmlns="http://www.w3.org/1999/xhtml">\n' +
-
'<head>\n' +
-
'<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />\n' +
-
'<title>Crear archivo HTML en Adobe AIR</title>\n' +
-
'<style>\n' +
-
'body {\n' +
-
' font:Arial, Helvetica, sans-serif;\n' +
-
' font-family:Arial, Helvetica, sans-serif;\n' +
-
' font-size:12px;\n' +
-
' margin-left:30px;\n' +
-
'}\n' +
-
'hr.Ruler {\n' +
-
' margin-left:-20px !important;\n' +
-
' color:#003366;\n' +
-
' border:1px solid #003366;\n' +
-
' background-color:#003366;\n' +
-
' width:800px;\n' +
-
'}\n' +
-
'.Estilo3 {\n' +
-
' color: #993300;\n' +
-
' font-weight: bold;\n' +
-
' font-size: 14px;\n' +
-
'}\n' +
-
'.Estilo4 {font-size: 12px; color: #666666;}\n' +
-
'a:hover, a:link, a:visited, a:active {font-size: 12px; color: #666666; text-decoration:none; }\n' +
-
'.Tabla_Datos td {\n' +
-
' height:25px;\n' +
-
'}\n' +
-
'</style>\n' +
-
'</head>\n' +
-
'<body>\n';
-
return _texto;
-
}
-
-
private function getDataTable():String {
-
var _texto:String = '<br />\n' +
-
'<span class="Estilo3">Archivo HTML en Adober AIR</span> <span class="Estilo4"><a href="http://codigometropoli.com">(http://codigometropoli.com)</a></span><br />\n' +
-
'<br />\n' +
-
'<table class="Tabla_Datos" width="700" border="0" cellspacing="0" cellpadding="0">\n' +
-
' <tr>\n' +
-
' <td width="138"><strong>Nombre:</strong></td>\n' +
-
' <td width="237">Juan Carlos</td>\n' +
-
' <td width="169"><strong>Fecha de Nacimiento:</strong></td>\n' +
-
' <td width="156">20/03/1981</td>\n' +
-
' </tr>\n' +
-
' <tr>\n' +
-
' <td><strong>País:</strong></td>\n' +
-
' <td>México</td>\n' +
-
' <td><strong>Ciudad:</strong></td>\n' +
-
' <td>Distrito Federal</td>\n' +
-
' </tr>\n' +
-
' <tr>\n' +
-
' <td><strong>Número de Cliente: </strong></td>\n' +
-
' <td>541232</td>\n' +
-
' <td> </td>\n' +
-
' <td> </td>\n' +
-
' </tr>\n' +
-
'</table>\n' +
-
'<hr class="Ruler" />';
-
return _texto;
-
}
-
-
private function getEndTags():String {
-
var _texto:String = '</body></html>';
-
return _texto;
-
}
-
-
private function writeIOErrorHandler(event:Event):void
-
{
-
trace("Error al abrir o escribir el archivo");
-
}
-
]]>
El resultado final se muestra en la siguiente imagen:
Enlaces recomendados:
» Building a text-file editor
» Adobe® Flex® 3 Language Reference
Si te gustó esta entrada anímate a escribir un comentario o suscribirte al feed y obtener los artículos futuros en tu lector de feeds.
















[...] los escribiremos en un archivo HTML y lo mostraremos dentro del componente HTML (aprovechando el post que publiqué hace ya tiempo sobre cómo crear un archivo en [...]