Posteado por: makinsc | mayo 6, 2011

Curso online Photoshop CS3

Estimados amigos, la empresa Realce Online S.L. Ofrece un curso online de Photoshop CS3, cuyo objetivo es que los alumnos adquieran un profundo conocimiento teorico/práctico que les permita abordar proyectos de cierta envergadura con garantías de éxito.

¿Qué es Photoshop?

Adobe Photoshop es el nombre o marca comercial oficial que recibe uno de los programas
más populares de la casa Adobe, junto con sus programas hermanos Adobe Illustrator (gráficos
vectoriales) y Adobe Flash (animaciones multimedia), y que se trata esencialmente de una
aplicación informática en forma de taller de pintura y fotografía que trabaja sobre un “lienzo” y
que está destinado para la edición, retoque fotográfico y pintura a base de imágenes de mapa
de bits (o gráficos rasterizados). Su capacidad de retoque y modificación de fotografías le ha
dado el rubro de ser el programa de edición de imágenes más famoso del mundo y el más
utilizado en el sector profesional.
Photoshop se ha convertido, casi desde sus comienzos, en el estándar de facto en retoque
fotográfico, pero también se usa extensivamente en multitud de disciplinas del campo del
diseño y fotografía, como diseño web, composición de imágenes bitmap, estilismo digital,
fotocomposición, edición y grafismos de vídeo y básicamente en cualquier actividad que
requiera el tratamiento de imágenes digitales.

Objetivos del Curso de Introducción a Photoshop

El Curso está indicado para todos aquellos usuarios que desean aprender a utilizar la
herramienta, bien para un uso particular como profesional, tanto para sectores enfocados al
diseño, como para cualquier tarea profesional en la que una representación en imágenes sea
complementaria al objetivo del trabajo.
Tanto para los usuarios más experimentados como para los noveles, el objetivo final del Curso
de Photoshop es el mismo: Un profundo conocimiento teórico/práctico de Photoshop, que
permita emprender proyectos de cierta envergadura, con garantías de éxito.

¿A quién va dirigido este curso?

El Curso Photoshop on-line está dirigido a:

  •   Estudiantes que pretendan ampliar sus conocimientos de diseño gráfico.
  •   Desarrolladores de sitios Web.
  •   Diseñadores gráficos.
  •   Usuarios de antiguas versiones de Photoshop (Se trabajará con la CS3).
  •   Desarrolladores Multimedia
  •   Programadores en entornos gráficos.

En cualquier caso, el curso no requiere un conocimiento previo ya que abarca desde los
principales conocimientos teóricos a técnicas avanzadas para alcanzar resultados pero
detalladamente explicadas, en un incremento del nivel paulatino para que puedan realizarlas
los alumnos que no tengan experiencia anterior en Photoshop.

Temario del curso

1. Conocer Photoshop (0.5 h)
2. Adquisición de imágenes y sus características (1 h)
3. El formato psd y gestiones con archivos (0.5 h)
4. Imagen y Lienzo (1 h)
5. La visualización en Photoshop (1 h)
6. Crear selecciones (5 h)
7. Gestión con selecciones (2 h)
8. Manipular selecciones (2 h)
9. Las Capas en Photoshop (5 h)
10. Los modos de fusión (2 h)
11. Deshacer acciones y rectificar (1 h)
12. El color en Photoshop (1 h)
13. Herramientas de pintura (5 h)
14. Herramientas de Texto (2 h)
15. Herramientas de modificación (10 h)
16. Las medidas en el documento (1 h)
17. Ajustes en imagen (10 h)
18. Las Máscaras (2 h)
19. Funcionamiento del trazado en Photoshop (1 h)
20. Filtros y Opciones de fusión (10 h)
21. Acciones (1 h)
22. Formatos gráficos y Guardar para Web (1 h)

Prácticas

Se realizarán una serie de ejercicios prácticos que serán evaluados por el tutor del curso. A lo
largo del temario se han incluido estos ejercicios prácticos y adicionalmente se establece una
práctica final de 10 horas de duración.

Duración y Evaluación

La duración del curso suponen 75 horas, y su desarrollo tiene lugar en una plataforma online
de aprendizaje, donde el alumno cuenta con plena libertad horaria, lo que supone poder
adaptarse a las necesidades del alumno. En esta plataforma online se aglutinan video
tutoriales, casos prácticos y demás recursos útiles para el aprendizaje del alumno, así como
herramientas de comunicación con el tutor del curso.
Las 75 horas lectivas se pueden repartir a lo largo de 2 meses, desde el 16 de Mayo de 2011 al
1 de Julio de 2011, fecha límite para entregar la practica final que será evaluada,
conjuntamente con el aprovechamiento del periodo lectivo de forma continua para evaluar
finalmente al alumno con una calificación en una escala de 0 a 10.
Durante todo el periodo de enseñanza el alumno cuenta con un tutor experto en la materia
que guiará y responderá a las necesidades lectivas, tanto en periodos concretos establecidos
para actividades de seguimiento y tutorización en grupo como en un periodo entre 24 y 48
horas para responder a dudas puntuales referentes al contenido del curso.

Entidades, persona y Colaboraciones

UHU – Miguel Ángel Vélez Vélez, Profesor Titular de la Universidad de Huelva. Imparte la
asignatura Multimedia desde hace 10 años. Participa en la elaboración del temario,
supervisando y aprobando contenidos.
Realce Online – José Joaquín Salguero Camacho, IT Informática, Programador/Diseñador. Experto en
tecnologías Flash y diseño gráfico con Photoshop, herramientas con las que trabaja
conjuntamente desde hace más de 8 años en los que ha desarrollado proyectos para
importantes entidades como Cepsa, Egmasa, Dip. Huelva, Excmo. Ayuntamiento de Huelva…
Ejerce como Tutor del curso.

Instrucciones de matriculación

Para instrucciones de matriculación y más información pueden visitar y rellenar el formulario de registro que se encuentra en la sección “Matricula” de la web www.cursostecnologicos.com

Muchas gracias y espero que les sea de vuestro interés.

Posteado por: makinsc | agosto 25, 2009

Marketing de proximidad, publicidad por bluetooh

Buenas amigos hoy vengo a comentaros una tecnología que me parece bastante interesante para todos aquellos empresarios y comerciantes. Se trata del llamado márketing de proximidad o publicidad por bluetooth que es una nueva forma de publicidad electrónica.

Consiste en mandar publicidad en un radio de unos 45-50 m a través de un servidor de bluetooth a todos los dispositivos que se encuentren en ese radio de acción.

Sus características son muy interesantes, ya que incrementa notablemente las ventas, captando al cliente que pasa cerca del establecimiento de venta.

En Europa prácticamente el 90% de la población posee un teléfono móvil de los cuales un 75% disponen de la tecnología Bluetooth para poder realizar comunicaciones inalámbricas. Gracias a las nuevas tecnologías podemos incorporar este canal de comunicación a las estrategias de marketing y publicidad y ofrecer contenidos innovadores para establecer una comunicación interactiva con el público objetivo.

El Marketing de proximidad mediante Bluetooth, es un sistema que ya ha sido bastante utilizado por algunas marcas e instituciones para enviar publicidad e información. Casi siempre se hace uso de Obex, un protocolo para el intercambio de “objetos binarios” que requiere autorización pero no autentificación (por lo que no es necesario emparejar a emisor / receptor) y que funciona sobre infrarrojos o BlueTooth. Lo soportan casi todos los teléfonos moviles actuales, las PDA…

Se le pueden mandar desde descuentos promocionales a videos publicitarios pasando por juegos multimedia para movil, con lo cual potencia la imágen de marca de la empresa e incrementa sus ventas.

Además, este tipo de publicidad por bluetooth no es intrusiva, ya que antes de enviarte la publicidad te pregunta si deseas aceptarla, entrando posteriormente en una lista negra del servidor de bluetooth y no volviendote a molestar según un tiempo parametrizado en el dispositivo.

El material multimedia detallado que se puede enviar con este sistema puede encontrarlo en la web de la empresa dedicada al sector del desarrollo de campañas de marketing de proximidad.

Ésta empresa posee un software desarrollado a medida para que el cliente pueda cargar sus propias campañas de publicidad por bluetooth de forma fácil y amigable sin tener que entender de informática. Plantea todo el servicio en una interfaz web con posibilidad de acceder a la administración de las campañas de marketing de proximidad en cualquier momento para cambiar los parámetros o simplemente ver las estadísticas en tiempo real de las campañas actuales.

Dicho esto, solo queda decir que el siguiente paso en la publicidad tradicional es el marketing de proximidad. Muchas gracias por su tiempo y espero que les haya resultado interesante la información.

Posteado por: makinsc | febrero 26, 2009

Curso online Diseño Multimedia con Flash 8

La prestigiosa empresa Realce Online eMarketing y Diseño lanza un nuevo curso de desarrollo y diseño de aplicaciones multimedia con la tecnología flash 8.

Es un curso completamente online del que los estudiantes podrán convalidar hasta 5 créditos de libre configuración en la Universidad de Huelva.

Ni que decir tiene que todo programador debe saber todo tipo de tecnologías y también diseñar. Con éste curso conseguirá dar el salto definitivo de calidad que necesita y podrán ampliar su abanico de posibilidades laborales.

Curso de Introducción al Diseño Multimedia Con Flash 8

Objetivos del Curso de Introducción al Diseño Multimedia con Flash 8

El Curso está indicado para todos aquellos usuarios que desean aprender a crear presentaciones multimedia avanzadas para la web y el mundo de Internet principalmente.

Tanto para los usuarios más experimentados como para los noveles, el objetivo final del Curso de Flash 8 es el mismo: Un profundo conocimiento teórico/práctico de Flash 8, que permita emprender proyectos profesionales de envergadura, con garantías de éxito.

¿A quién va dirigido este curso?

El Curso Flash 8 on-line está dirigido a:

Estudiantes que pretendan ampliar sus conocimientos en entornos multimedia

Desarrolladores de sitios Web.

Diseñadores gráficos.

Usuarios de antiguas versiones de Flash.

Desarrolladores Multimedia

Programadores en entornos gráficos.

En cualquier caso, el curso no requiere un conocimiento previo ya que abarca desde los principales conocimientos teóricos a técnicas avanzadas para alcanzar resultados pero detalladamente explicadas, en un incremento del nivel paulatino para que puedan realizarlas los alumnos que no tengan experiencia anterior en Flash 8 o alguna versión anterior o posterior.

Duración y Evaluación

La duración del curso suponen 75 horas, y su desarrollo tiene lugar en una de aprendizaje, donde el alumno cuenta con plena libertad horaria, lo adaptarse a las necesidades del alumno.

Las 75 horas lectivas se pueden repartir a lo largo de 2,5 meses aproximadamente, de Marzo de 2009 a 1 de Junio de 2009, fecha límite para entregar la practica evaluada, conjuntamente con el aprovechamiento del periodo lectivo de forma evaluar finalmente al alumno con una calificación en una escala de 0 a 10.

Créditos de libre configuración

Si eres estudiante de la UHU podrás, con el certificado de haber aprobado el curso, convalidar hasta 5 créditos para lo que tienes que dirigirte a secretaria, solicitar la convalidación y abonar las tasas (30% del precio normal del crédito).

Matriculación

Para matricularte puedes seguir las instrucciones que encontraras  visitando la web:

http://www.cursostecnologicos.com

curso

Saludos y espero que la información sea de su agrado.

En primer lugar deberíamos definir formal y brevemente qué es y para que sirven los proveedores de perfiles en ASP.NET y como están realizados por dentro.

Los proveedores de perfiles, sin querer entrar en mucho detalle, engloban una serie de funcionalidad específica, para guardar datos de un posible perfil de un usuario de un sitio Web. Entre estos datos, los más comunes son por ejemplo: el tema de la página que tiene seleccionado, el nombre, apellidos, edad, y todas las preferencias que se nos ocurran.

Este proveedor de perfiles, por defecto, está implementado para que guarde los datos en la base de datos por defecto de ASP.NET, la base de datos de SQL Server ASPNETDB, y de esta limitación, nos viene al caso este post.

Existen muchas ocasiones en las que no usamos sql Server por especificaciones del diseño y tenemos que usar otro motor de base de datos distinto, o queremos ampliar esa funcionalidad que ya trae para que además de guardar en la bbdd por defecto de sql Server, guarde otros datos en otras tablas de nuestra base de datos propia. En fin, se me ocurren multitud de escenarios en los que sería beneficioso poder agregar funcionalidad o cambiarla por completo para adecuar el adaptador de perfiles a nuestras necesidades.

Gracias a que el proveedor de perfiles por defecto de Microsoft ASP.NET está basado en el patrón “Strategy”, que a groso modo dice que para resolver un problema determinado (en nuestro caso guardar preferencias de nuestros usuarios para mas tarde aplicarlas cuando vuelva al sitio) se le puede conectar diferentes algoritmos , según nos convenga. Cualquier programa que ofrezca un servicio o función determinada, que pueda ser realizada de varias maneras, es candidato a utilizar el patrón Strategy. Puede haber cualquier número de estrategias y cualquiera de ellas podrá ser intercambiada por otra en cualquier momento, incluso en tiempo de ejecución.

Después de esta pequeña introducción me voy a referir al motivo de este post, que es crear un proveedor de perfiles que en vez de guardar los datos en una base de datos, pueda guardarlos en una cookie, para luego volver a recuperarlos en posteriores ocasiones siempre que la cooki siga existiendo.

1º En primer lugar, lo que vamos a hacer es crear un proyecto classlibrary con Visual Studio.

Borramos la clase que nos viene por defecto y creamos una que se llame ProfileCookieProvider y que herede de ProfileProvider.

class ProfileCookie:ProfileProvider

2º Luego sobrescribimos todos los métodos de la clase de la que heredamos.

public override int DeleteInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate)

{

throw new NotImplementedException();

}

public override int DeleteProfiles(string[] usernames)

{

throw new NotImplementedException();

}

public override int DeleteProfiles(ProfileInfoCollection profiles)

{

throw new NotImplementedException();

}

public override ProfileInfoCollection FindInactiveProfilesByUserName(ProfileAuthenticationOption authenticationOption, string usernameToMatch, DateTime userInactiveSinceDate, int pageIndex, int pageSize, out int totalRecords)

{

throw new NotImplementedException();

}

public override ProfileInfoCollection FindProfilesByUserName(ProfileAuthenticationOption authenticationOption, string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)

{

throw new NotImplementedException();

}

public override ProfileInfoCollection GetAllInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate, int pageIndex, int pageSize, out int totalRecords)

{

throw new NotImplementedException();

}

public override ProfileInfoCollection GetAllProfiles(ProfileAuthenticationOption authenticationOption, int pageIndex, int pageSize, out int totalRecords)

{

throw new NotImplementedException();

}

public override int GetNumberOfInactiveProfiles(ProfileAuthenticationOption authenticationOption, DateTime userInactiveSinceDate)

{

throw new NotImplementedException();

}

public override string ApplicationName

{

get

{

throw new NotImplementedException();

}

set

{

throw new NotImplementedException();

}

}

public override System.Configuration.SettingsPropertyValueCollection GetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection collection)

{

throw new NotImplementedException();

}

public override void SetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyValueCollection collection)

{

throw new NotImplementedException();

}

3º Declaramos las variables y propiedades de la clase

class ProfileCookie:ProfileProvider

{

// Declaramos las variables

private string _Nombrecookie;

public string Nombrecookie

{

get { return _Nombrecookie; }

set { _Nombrecookie = value; }

}

private int _ExpiracionCookie;

public int ExpiracionCookie

{

get { return _ExpiracionCookie; }

set { _ExpiracionCookie = value; }

}

private string _appNombre;

public string AppNombre

{

get { return _appNombre; }

set { _appNombre = value; }

}

4º Creamos el procedimiento de inicialización del proveedor, donde se le pasará un parámetro name con el nombre del proveedor y un parámetro namevaluedcollection “config” que contendrá todos los atributos del proveedor que se encuentran en el archovo de configuración Web.config de la aplicación que usa el proveedor.

public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)

{

// Comprobar que el proveedor tiene un nombre

if(string.IsNullOrEmpty(name))

{

name= “ProfileCookieProvider”;

}

// Inicializar el método de la clase base

base.Initialize(name, config);

// Leemos el nombre de la aplicacion

_appNombre = config["aplicationName"];

if (string.IsNullOrEmpty(_appNombre))

{

_appNombre = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath;

}

//Leemos el nombre de la cookie

_Nombrecookie = config["cookieName"];

if (string.IsNullOrEmpty(_Nombrecookie))

{

_Nombrecookie = “.Perfil”;

}

//Eliminamos el nombre de la cookie

config.Remove(“cookieName”);

// Leemos la duración de la cookie

bool sucess = Int32.TryParse(config["cookieName"], out _ExpiracionCookie);

if (!sucess)

{

_ExpiracionCookie = 10;

}

config.Remove(“cookieExpires”);

// Lanzamos una excepcion si hay algún atributo desconocido

if (config.Count > 0)

{

string atributo = config.GetKey(0);

if (!string.IsNullOrEmpty(atributo))

{

throw new ProviderException(“Atributo no reconocido : “ + atributo);

}

}

}

5º No vamos a implementar todos los métodos heredados de la clase base, lanzando un error en todas las que no implementemos.

throw new NotImplementedException();

6º Implementamos el método GetPropertyValues que devolverá el contenido del perfil del usuario. Se leerán los datos desde el almacén de datos, en este caso desde la cookie, y se devuelve en una colección de valores.

public override System.Configuration.SettingsPropertyValueCollection GetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyCollection collection)

{

System.Configuration.SettingsPropertyValueCollection settings;

settings = new System.Configuration.SettingsPropertyValueCollection();

if (collection.Count == 0)

return settings;

// Añadimos todas las porpiedades a la colección de salida,

// Garantizando que se van a crear dichas entradas en el objeto profil

foreach (System.Configuration.SettingsProperty property in collection)

{

System.Configuration.SettingsPropertyValue pv = new System.Configuration.SettingsPropertyValue(property);

settings.Add(pv);

}

// Leemos la cookie si existe

string username = (string)context["UserName"];

string cookie = Nombrecookie + ” “ + username;

System.Web.HttpCookie cookieprofile = System.Web.HttpContext.Current.Request.Cookies[cookie];

if (cookieprofile == null)

{

return settings;

}

// Descodificación en Base64 y deserialización binaria

string data = cookieprofile["SerializedData"];

byte[] bits = Convert.FromBase64String(data);

System.Collections.Hashtable table = null;

using (System.IO.MemoryStream mem = new System.IO.MemoryStream(bits))

{

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bin;

bin = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

table = (System.Collections.Hashtable)bin.Deserialize(mem);

mem.Close();

}

// Añadimos los datos a las propiedades

foreach (System.Configuration.SettingsPropertyValue spv in settings)

{

spv.Deserialized = true;

spv.PropertyValue = table[spv.Name];

}

return settings;

}

7º Implementamos el método SetPropertyValues, que guardará el contenido de perfil del usuario al final de cada solicitud.

/// <summary>

/// Guarda el contenido de collection en una cookie

/// </summary>

/// <param name=”context”>Información contextual</param>

/// <param name=”collection”>Colección de propiedades a guardar en la cookie</param>

public override void SetPropertyValues(System.Configuration.SettingsContext context, System.Configuration.SettingsPropertyValueCollection collection)

{

// Obtengo información sobre el usuario

string username = (string)context["UserName"];

bool autenticado = (bool)context["IsAuthenticated"];

// Si no hay propiedades terminamos

if (String.IsNullOrEmpty(username) || collection.Count == 0)

{ return; }

// Preparo la Cookie

string cookie = Nombrecookie + “_” + username;

System.Web.HttpCookie cookiePerfil = System.Web.HttpContext.Current.Request.Cookies[cookie];

if (cookiePerfil == null)

{

cookiePerfil = new System.Web.HttpCookie(cookie);

}

cookiePerfil.Expires = DateTime.Now.AddMinutes(ExpiracionCookie);

// Preparo los datos para guardar en la cookie

System.Collections.Hashtable tabla = new System.Collections.Hashtable();

foreach (System.Configuration.SettingsPropertyValue pp in collection)

{

if (!autenticado && !(bool)pp.Property.Attributes["AllowAnonymous"])

{

continue;

}

tabla.Add(pp.Name, pp.PropertyValue);

}

// Codificar y escribir la tabla hash para la cookie

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bin;

bin = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

System.IO.MemoryStream mem = new System.IO.MemoryStream();

bin.Serialize(mem, tabla);

string data = Convert.ToBase64String(mem.GetBuffer(), 0, (int)mem.Length);

cookiePerfil["SerializedData"] = data;

// Guardar en la cookie

System.Web.HttpContext.Current.Response.AppendCookie(cookiePerfil);

}

Ahora generamos el proyecto y nos crea una dll que es la que tendremos que usar en nuestro proyecto ASP.NET, que junto con unas configuraciones en el Web.config de nuestra aplicación harán posible el uso de perfiles de usuarios almacenados en cookies.

Esto lo explicaré en el siguiente artículo ya que éste se ha extendido demasiado.

Espero que os haya sido útil esta información y que le saquéis provecho.

Hasta pronto.

Posteado por: makinsc | agosto 20, 2008

Cambiar Estilo de botón en ASP.NET en cliente

Buenas, hoy voy a poner un pequeño apunte por si a alguien pudiese interesarle y para no olvidarme de él para el futuro.

Resulta que el otro día preguntaban en el Foro de MSDN España cómo hacer que cambie el estilo de un botón cuando obtiene el foco sin tener que recargar toda la página y sin usar AJAX por exigencias del servidor.

Entonces la solución fue esta:

Nos vamos al cóodigo HTML de la página y añadimos un text box y un botón

<asp:TextBox ID=”TextBox1″ runat=”server”></asp:TextBox>
<asp:Button ID=”Button1″ runat=”server” Text=”Button” />

en el head de esta página creamos la siguiente función javascript :

<script language=”javascript” type=”text/javascript”>
function cambiarEstilo(){
document.getElementById(‘Button1′).style.backgroundColor =’#FFAAFF’;
}
</script>

y por último en el page load de la página o donde nos convenga añadimos un atributo al botón de forma que el evento onfocus llame a la función de la siguiente manera :

Button1.Attributes.Add(“onfocus”, “javascript:cambiarEstilo();”);

y listo, de esta manera, cuando estemos ejecutando la página pinchamos en el textbox y le damos al tabulador para que el foco se ponga en el botón y veremos el que fondo se cambia de color automáticamente.

Es lógico pensar que puedes cambiar cualquier cosa del botón desde javascript.

Sin más, espero que os haya sido interesante.

Hasta la próxima !!

Posteado por: makinsc | julio 18, 2008

Generar Factura en PDF con ASP.NET

Buenas, hoy voy a escribir como crear un informe, en este caso una factura de un pedido de una tienda virtual, en PDF con la tecnología de Microsoft ASP.NET 2.0 y una librería existente de código abierto que se llama Gios.PDF.


Comenzamos :


Antes que nada, decir que es una librería gratuita que podemos descargar el código fuente y revisarlo. Debemos agregar las DLL en el directorio BIN de nuestra aplicación.


Vamos con el código…



Lo primero que debemos crear es el documento PDF donde vamos a meter todos los datos de la factura.


PdfDocument myPdfDocument = new PdfDocument( PdfDocumentFormat.InCentimeters( 21, 29.7));


La enumeración PdfDocumentFormat indica el tamaño del documento que vamos a crear. Tiene varias opciones como son A4, A4 Horizontal, letter8,5*11


En nuestro caso, le hemos indicado el tamaño por centímetros, ya que el PDF es un formato de impresión y no dependerá de la resolución de la pantalla.



A continuación creamos una tabla donde vamos a meter el desglose de la factura :


PdfTable myPdfTable = myPdfDocument.NewTable( new Font(“Verdana”, 12), DatosDesglose.Rows.Count, 3, 4);


A la tabla le indicamos que tenemos tantas filas como tiene el datatable, las columnas se las inndicamos manualmente ya que son fijas y le damos un cellPadding de 4.



Datos desglose es un DataTable que he rellenado anteriormente con los datos del pedido realizado.


DataTable desglose


{


get


{


// Creo el DataTable


DataTable dt = new DataTable();


// Le asigno las columnas


dt.Columns.Add(“Concepto”);


dt.Columns.Add(“Precio”);


dt.Columns.Add(“cantidad”);








// Obtengo los productos del pedido


DsProductosTableAdapters.Obtener_productos_pedidoTableAdapter TAProdPed =


new DsProductosTableAdapters.Obtener_productos_pedidoTableAdapter();


DsProductos.Obtener_productos_pedidoDataTable DTProd = TAProdPed.GetData( Int32.Parse(idped));


// Recorro los productos y los añado al DataTable creado anteriormente


foreach (DsProductos.Obtener_productos_pedidoRow prod in DTProd.Rows)


{


DataRow dr = dt.NewRow();


dr[0] = prod.nombre;


dr[1] = prod.precio.ToString() + “€”;


dr[2] = prod.cantidad.ToString();


dt.Rows.Add(dr);


}


}


// Devuelvo el datatable relleno con los datos de los productos del pedido


return dt;


}






Continuamos creando el PDF…



// Importamos los datos de los datatables con las cabeceras incluidas


myPdfTable.ImportDataTable(DatosDesglose);





Le damos un poco de diseño visual a la tabla de desglose :



// Color de la cabecera


myPdfTable.HeadersRow.SetColors(Color.White, Color.Navy);


// Especificamos el color de las letras, el color de fondo y el color de fondo de las filas alternadas


myPdfTable.SetColors(Color.Black, Color.White, Color.Gainsboro);


// Establecemos el color del borde y el grosor del mismo diciendole que lo aplique a todo el grid


myPdfTable.SetBorders(Color.Black, 1, BorderType.CompleteGrid);




Asignamos el ancho de las columnas


myPdfTable.SetColumnsWidth(new int[] { 80, 20 });


El ancho de las columnas no tiene que sumar 100, sino que es un ancho relativo dentro del documento. No es muy intuitivo y suele pasar que haya que hacer varias pruebas hasta que las columnas se ajustan correctamente como queremos.


Comentar que se puede tener un número de columnas en el SetColumnsWidth inferior o igual al total de columnas de la tabla, y nunca superior, ya que si lo superamos, daría un error en tiempo de ejecución que te puede volver un poco loco.





Ahora creamos otra tabla de pdf para rellenarla con los datos de la empresa que emite la factura.



// DATOS DE la empresa en CABECERA


PdfTable TablaDanosNacho = myPdfDocument.NewTable( new Font(“Verdana”, 12), 4, 2, 4);


TablaDanosNacho.HeadersRow.SetColors(Color.White, Color.BurlyWood);





Damos una alineación al contenido



TablaDanosNacho.SetContentAlignment(ContentAlignment.MiddleCenter);





Le decimos que la columna 1 deberá tener el contenido en el centro a la izquierda


TablaDanosNacho.Columns[1].SetContentAlignment(ContentAlignment.MiddleLeft);


TablaDanosNacho.ImportDataTable(DataEmpresa);


TablaDanosNacho.SetColumnsWidth(new int[] { 20, 80 });


TablaDanosNacho.SetBorders(Color.Black, 1, BorderType.Bounds);





Unimos las celdas de las columnas con esta instrucción


TablaDanosNacho.HeadersRow.MergeCells();




Le asignamos a la cabecera un titular


TablaDanosNacho.HeadersRow.SetContent(“DATOS DE LA EMPRESA.”);











La variable DataEmpresa la rellenamos de la siguiente manera :



DataTable DataNacho


{


get


{


// Creamos el Datatable


DataTable dt = new DataTable();


// Creamos las dos columnas sin texto que luego unimos en el PDFTable y le asignamos un texto


dt.Columns.Add(“”);


dt.Columns.Add(“”);


// Creamos una fila y le asignamos el nombre


DataRow dr = dt.NewRow();


dr[0] = “Nombre”;


dr[1] = “Realce Online eMarketing y Diseño”;


dt.Rows.Add(dr);


// Otra fila y le asignamos el DNI


DataRow dr1 = dt.NewRow();


dr1[0] = “DNI”;


dr1[1] = “22.345.543K”;


dt.Rows.Add(dr1);


// Otra fila con la Dirección


DataRow dr2 = dt.NewRow();


dr2[0] = “Dirección”;


dr2[1] = “C/ La Quito 17 6º A”;


dt.Rows.Add(dr2);


// Y Otra fila con el resto de datos


DataRow dr3 = dt.NewRow();


dr2[0] = “CP.- “;


dr2[1] = “28015 Localidad: Huelva Provincia: Huelva”;


dt.Rows.Add(dr3);


// Devuelvo el dataTable Relleno


return dt;


}


}






Ahora creamos otra tabla con los datos del Cliente



// DATOS DEL CLIENTE


PdfTable TablaDanosCliente = myPdfDocument.NewTable( new Font(“Verdana”, 12), 3, 2, 4);


TablaDanosCliente.HeadersRow.SetColors( Color.White, Color.BurlyWood);


TablaDanosCliente.SetContentAlignment( ContentAlignment.MiddleCenter);


TablaDanosCliente.ImportDataTable( DatosCliente);


TablaDanosCliente.SetColumnsWidth(new int[] { 20, 80 });


TablaDanosCliente.SetBorders(Color.Black, 1, BorderType.Bounds);


TablaDanosCliente.HeadersRow.MergeCells();


TablaDanosCliente.HeadersRow.SetContent(“DATOS DEL CLIENTE.”);



En este código no hay nada nuevo, y basta con decir que el DataTable DatosCliente es rellenado de la misma forma que DatosEmpresa pero con los datos del cliente obtenidos de la base de datos que estemos usando.





A continuación Creamos el resto de tablas de los importes totales con y sin los IVA y la tabla de la fecha de la factura y el número de factura obligatorios en toda factura que se precie.



// DATOS FINALES



PdfTable TablaDanosFinales = myPdfDocument.NewTable( new Font(“Verdana”, 12), 1, 3, 4);


TablaDanosFinales.HeadersRow.SetColors( Color.White, Color.BurlyWood);


TablaDanosFinales.SetContentAlignment( ContentAlignment.MiddleCenter);


TablaDanosFinales.ImportDataTable( DatosFinales);


TablaDanosFinales.SetColumnsWidth( new int[] { 40, 20, 40 });


TablaDanosFinales.SetBorders( Color.Black, 1, BorderType.Bounds);



// DATOS FECHA



PdfTable TablaDanosFecha = myPdfDocument.NewTable( new Font(“Verdana”, 12), 2, 2, 4);


TablaDanosFecha.HeadersRow.SetColors(Color.White, Color.BurlyWood);


TablaDanosFecha.SetContentAlignment(ContentAlignment.MiddleCenter);


TablaDanosFecha.ImportDataTable(DatosFecha);


TablaDanosFecha.SetColumnsWidth(new int[] { 40, 40 });


TablaDanosFecha.SetBorders(Color.Black, 1, BorderType.Bounds);


TablaDanosFecha.VisibleHeaders = false;







Ahora vamos a cargar una imagen corporativa en el documento para que de sensación de corporatividad y de empresa seria.



PdfImage Logo = myPdfDocument.NewImage( HttpContext.Current.Server.MapPath(“~/imagenes/globo.jpg”));


Debe ser una imagen JPG ya que no acepta esta versión otro formato, aunque estoy seguro que en la versión 2.0 que se está preparando (no se si ya existe) de esta librería vendrá implementada muchas mejoras.





Ahora llega la parte delicada de esta pelicula.


Tenemos que realizar un bucle para ir generando el PDF con los datos de las tablas que hemos ido creando anteriormente y posicionarlas de forma relativa en el documento.



// Here comienza el bucle para generar la tabla


while (!myPdfTable.AllTablePagesCreated)


{


// Generamos una nueva página en el documento que albergará las tablas anteriores


PdfPage newPdfPage = myPdfDocument.NewPage();


// Generamos una nueva página de tablas en el documento, indicandole la posición que llevará en el documento


PdfTablePage newPdfTablePage =


myPdfTable.CreateTablePage(new PdfArea(myPdfDocument, 48, 300, 500, 670));



// CREO LA TABLA DE LOS DATOS DE LA EMPRESA


PdfTablePage newPdfTablePage2 =


TablaDanosNacho.CreateTablePage(new PdfArea(myPdfDocument, 20, 20, 260, 100));




// CREO LA TABLA DEl CLIENTE


PdfTablePage newPdfTablePage3 =


TablaDanosCliente.CreateTablePage(new PdfArea(myPdfDocument, 20, 150, 260, 200));




// CREO LA TABLA DE FECHA Y Nº FACTURA


PdfTablePage newPdfTablePage5 =


TablaDanosFecha.CreateTablePage(new PdfArea(myPdfDocument, 300, 20, 150, 150));





// AGREGAMOS LOS OBJETOS A LA PAGINA PDF CREADA AL INICIO DEL BUCLE


newPdfPage.Add(Logo, 460, 20);


newPdfPage.Add(newPdfTablePage);


newPdfPage.Add(newPdfTablePage2);


newPdfPage.Add(newPdfTablePage3);


newPdfPage.Add(newPdfTablePage5);



if (myPdfTable.AllTablePagesCreated)


{


PdfTablePage newPdfTablePage4 =


TablaDanosFinales.CreateTablePage( new PdfArea( myPdfDocument, 120, 700, 300, 80));


newPdfPage.Add(newPdfTablePage4);


}


}// Fin del bucle





Guardamos los cambios en el documento



newPdfPage.SaveToDocument();





Ahora exportamos el fichero,




documentofactura.SaveToFile( HttpContext.Current.Server.MapPath(“~/Public/factura.pdf”));



Podemos guardar en un fichero físico en nuestro servidor o podemos ponerlo a descarga directa en el navegador.


Yo en mi caso, lo he guardado en un fichero fisico, que luego leo y envio por correo electrónico (donde no voy a entrar en este artículo, ya hablaremos de ello más adelante)



FileStream fich = File.Open( HttpContext.Current.Server.MapPath(“~/Public/factura.pdf”), FileMode.Open);





Creo mi objeto de la clase que envia el correo


Mail MailSender = new Mail();





Creo el cuerpo del mensaje


string body = “<html><body>Estimado usuario, adjunto se le envía la factura de su pedido. Si detecta algún fallo o anomalía contacte con la redacción a través de la web <a href=\”http://www.realceonline.com\”>AeRoLoCoS.eS. Gracias por la compra.</a></body></html>”;





Llamo a la función que envía el pdf adjunto al mail del usuario que ha realizado el pedido


MailSender.enviarMailPdfAdjunto(fich, “correoFROM@dominio”, email, “Factura de compra en www.realceonline.com”, body, “loginmailsmtp”, “passmailsmtp”);







Una vez enviado el fichero lo libero y lo elimino


fich.Close();


fich.Dispose();


File.Delete(HttpContext.Current.Server.MapPath(“~/Public/factura.pdf”));





Ahora lo que hago es poner el documento generado anteriormente en descarga directa en el navegador



//Descargo la factura


HttpContext.Current.Response.ClearHeaders();


HttpContext.Current.Response.AppendHeader(“Content-disposition”,


string.Format(“attachment;filename={0}”, “Factura.pdf”));





Le indico al navegador que le voy a enviar datos de tipo de aplicación PDF para que reconozca con que programa asociarlo


HttpContext.Current.Response.ContentType = “application/pdf”;




Le indico el tipo de codificación


HttpContext.Current.Response.Charset = “UTF-8″;


HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default;




Devuelvo el fichero PDF generado como un Stream en memoria y se lo asocio al OutputStream de lo que voy a delvolver al navegador documentofactura.SaveToStream(HttpContext.Current.Response.OutputStream);





Finalizo la operación


HttpContext.Current.Response.End();



Como muestra un Botón :




Generación de PDF con ASP.NET. Desarrollo y diseño Web a medida.

Generación de PDF con ASP.NET. Desarrollo y diseño Web a medida.

Posteado por: makinsc | junio 24, 2008

USANDO EL FRAMEWORK LIGHTBOX EN PROYECTOS WEB

Hace cosa de 1 año, descubrí un framework para realizar cosas al estilo AJAX en mis proyectos con ASP.NET. Este framework permite mostrar espectaculares pop-ups con imágenes y grupos de imágenes. Consiste en cargar una serie de ficheros de Script (JavaScript) y CSS en el código de nuestra página, que te permitirán poder mostrar una ventana por encima de la página contenedora, de forma que todo el contenido quede bloqueado centrándose en la ventana que se ha superpuesto.

Visor de Imágenes y popup de formularios son los casos de uso típicos en los que suelo usarlo.

Permite mostrar espectaculares pop-ups con imágenes y grupos de imágenes.

Las instrucciones para usarlo son las siguientes:

Para abrir una ventana en modo popup con esta librería :

Descargar las librerías de aqui

Crear un HTML con el siguiente código en la cabecera:

<head>

<title>AJAX con LIGHTBOX</title>

<!—aquí se carga la hoja de estilos que propicia el efecto background –>

<link rel=”stylesheet” href=”css/lightbox.css” type=”text/css” media=”screen” />

<!—Aquí se cargan los 3 Javascripts que son necesarios para ejecutar el framework –>

<script src=”js/prototype.js” type=”text/javascript”></script>

<script src=”js/scriptaculous.js?load=effects” type=”text/javascript”></script>

<script src=”js/lightbox.js” type=”text/javascript”></script>

</head>

Mucho cuidado en este paso al poner las rutas tanto del fichero externo lightbox.css como el de los scripts ya que si nos equivocamos en la ruta, no funcionará ya que no encontrará los scripts a ejecutar (obvio)

En el body de la página creada anteriormente escribimos un enlace a la página que queremos mostrar como popup, con el atributo rel correspondiente

<a href=”default.aspx” rel=”lightbox_text”>Ver página popup</a>

Guardamos el Fichero creado y lo ejecutamos en el navegador.

Este debe ser el resultado Final

Diseño Web con Framework Ajax

No está nada mal el efecto, pero lo bueno de todo esto es que se puede adaptar a nuestras necesidades solo sabiendo un poco de Javascript y cacharreando un poco. Como muestra un botón.

La librería, por defecto, te crea un botón que te cierra la ventana popup, pero si queremos crear otro botón un poco más intuitivo, lo que debemos hacer es solo que en el evento click de ese botón de cerrar, ejecute la instrucción javascript : javascript:myLightbox.end(); return false;

En mi caso, al ser un botón de ASP.NET, se puede realizar de la siguiente manera:

<asp:Button ID=”btnCancelarVotar” OnClientClick=”javascript:myLightbox.end(); return false;” runat=”server” Text=”Cancelar” />

Este es el efecto final :

Esta puede ser la revolución que el mercado estaba esperando…. A través del cuero cabelludo se recogen los estímulos nerviosos de las partes del cerebro encargadas de ciertas funciones y mediante un procesador, se convierten en instrucciones maquina.

Me imagino que cuando esto salga a la luz, el desarrollo de interfaces hombre-maquina evoloucionará considerablemente, sobretodo para sectores como los videojuegos de realdad virtual y de discapacitados.

Un bomba.

fuente : http://weblogs.madrimasd.org/sistemas_inteligentes/archive/2008/06/16/94725.aspx

 

Buenas, quería presentarme primero para que mis lectores puedan conocer a quien leen. Soy nuevo en esto de los blogs y poco a poco iré cogiendo soltura. En primer lugar mi nombre es Joaquín Salguero y vivo en Huelva. Estudié Ingeniería técnica de informática de sistemas en la escuela politécnica superior de la Rábida en Palos de la Frontera, Huelva. Durante la carrera, tuve la oportunidad, gracias al programa de prácticas de SOIPEA de la Universidad de Huelva, de realizarlas en dos de las mejores empresas de mi ciudad. CEPSA refinería de la Rábida, donde tuve mi primera toma de contacto con la administración de sistemas y con el mantenimiento informático, donde me encontraba a mis anchas. Aprendí bastante, teniendo en cuenta que por aquella época no tenía aún ni idea de nada, simplemente intentaba aprobar las que podía y me dedicaba ir saliendo del paso que ya era bastante. Al año siguiente, dada la gran experiencia tomada en las prácticas del año anterior, decidí volverme a apuntar al programa de prácticas. Mi gran suerte fue caer en una de las mejores empresas de las que podía haber caído. E.M.T.U.S.A. Allí conocí mucha gente, pero sobre todo conocí a mi gran amor desde aquel día “LA TECNOLOGÍA .NET” (Siempre después de la de carne y hueso…J). En esa empresa desarrollamos un software de gestión donde tuve la oportunidad de aportar mi granito de arena en la parte sobre todo de informes con Crystal Report, donde me convertí en un experto. La herramienta llevaba gran parte de la administración de la empresa. Usuarios, remesa de tarjetas, facturación… y tenía muchas muchas líneas de código, que inicialmente estaban un poco caóticas, pero conforme fuimos aprendiendo la tecnología ya fuimos modulando cada vez más el código hasta que quedó una aplicación bastante aceptable. En aquella época estaba muy reciente esa tecnología, y trabajábamos con el Framework 1.0 de Microsoft. Tras terminar las prácticas y el curso, a falta de 2 asignaturas para terminar la carrera, me fui a Inglaterra, más en concreto a la ciudad de Chester, donde estuve 2 meses y pude aprender a desenvolverme de forma aceptable con el Ingés. Luego regresé a España y terminé mi carrera. Nada más terminar, comencé a buscar trabajo, cosa bastante difícil en mi ciudad, Huelva. Así que decidí buscar trabajo fuera, tras varias entrevistas frustradas. En menos de un mes ya me llamaron de una gran consultora, CORITEL. Me hicieron unas pruebas escritas de tipo test de inteligencia, y más tarde una entrevista personal, tras la cual pasé a una de las famosas “becas” para luego poder pasar a plantilla ya con un contrato de los de verdad :-D . Durante la beca realicé un mes de ANSI C con sistemas UNIX y luego pasé a Visual Basic 6, lo cual me gustaba muchísimo más que C… Tras terminar mi beca, pasé a contrato y entré en un proyecto de ASP.NET, que no conocía en profundidad y solo había podido cacharrear con un par de manuales del amigo Guille. Aquí conocí mi 2º gran amor “ASP.NET y SQL Server 2000”. Nunca había trabajado en equipo de aquella forma con un control de código fuente (Source Safe ) , con servidores disponibles, certificados de seguridad, y mucho muuucho café. Aprendí mucho la verdad con mis Jefes José Carlos y Salvador (saludos a ambos). Allí realizamos una aplicación para Recursos Humanos, donde se calculaba el banding anual de todos los empleados y se le calculaban las subidas de nivel y de salario correspondiente según unas notas y demás historias. Muy divertido e instructivo, la verdad.

Después de un tiempo, pasé a trabajar a una agencia de comunicación y marketing online, donde conocí una nueva versión de mi mismo, como coDirector del departamento de nuevas tecnologías (NNTT) junto con otros compañeros y amigos. Allí aprendí la parte de la tecnología .NET y Java aplicada a aplicaciones comerciales orientadas al marketing online. Ya por estos tiempos trabajábamos con el Framework 1.1 y C# con SQL Server 2000, XML y Flash, mucho flash ¡! Aquí trabajé para grandes clientes, como Real Madrid, ONO, UniversalMusic, Garrigues abogados, Ayuntamiento de Madrid, TELCEL de México, DECATHLON, entre otros cuantos, que realizaban sus páginas Web corporativas y campañas de publicidad online con nosotros. Cuando creí haber tocado techo en esta empresa, opté por volver a mi tierra, donde me ofrecieron ya con la experiencia adquirida un buen puesto de trabajo con contrato indefinido. Pues nada, para casa. Menos mal, pude eludir ese año el crudo verano madrileño, donde todo es calor, obras en los metros y más calor todavía. ¡Qué bien, estaba en casita ¡!! La playa, el sol, el olor a marisma, la pesca, mis amigos de toda la vida.. ¡! Esto si que es vida. El nuevo trabajo era en una empresa de Ayamonte que se dedicaba a la creación de un mega-Software para las Sociedades de Garantía Recíproca Españolas. De allí la verdad que con lo que más me quedo es con la gente que conocí. He conseguido hacer muy buenos amigos allí y aprendí mucho de ellos. Trabajábamos ya con el Framework 2.0 y el flamante Visual Studio 2005 con TFS como control de código y SQL SERVER 2005 como gestor de bases de datos. En aquel momento ya empezaba a rondar por mi cabeza y la de mi actual socio montar algo por nuestra cuenta, pero la cosa de momento no salió en una primera instancia, así que seguimos por cuenta ajena. Pasado un año de estar en Ayamonte vimos recompensados nuestros esfuerzos en la realización de planes de empresa, sobre todo de mi socio y gran amigo Rafael Vizcaíno, al cual mando un fuerte abrazo, cuando la querida Diputación de Huelva nos aprobó la concesión de un local habilitado con internet y de unos 35 metros cuadrados donde poder desempeñar nuestra actividad. Tras esto, decidimos lanzarnos a la aventura montando lo que hoy es Realce Online eMarketing y Diseño, dejando todo nuestros lazos con el mundo laboral por cuenta ajena para convertirnos en dos empresarios que trabajarían por conseguir levantar una empresa de nuevas tecnologías en un ambiente tan hostil para ello como es nuestra querida ciudad de Huelva.

A día de hoy aun no nos arrepentimos de habernos lanzado al mundo empresarial por cuenta propia, con sus pros y sus contras, pero sobre todo con la satisfacción de crear tus propias aplicaciones y luego distribuirlas, que es como ver crecer a tu perro o a tu pájaro desde pequeño.

En fin, este ha sido el resumen de mi trayectoria hasta este momento de mi vida, en el que doy el salto hacia la blogosfera, espero con buen pie. En próximos artículos daré más detalles sobre mi empresa de desarrollo de software y sobre todo, hablaremos sobre tecnologías Microsoft.

Saludos y comenzamos….

Categorías

Seguir

Get every new post delivered to your Inbox.