25.3.11

Me he mudado

Hace mucho tiempo que no tocaba este blog y ya casi lo tenía olvidado, ahora todo lo publico en http://dosmap.com/doliveras

13.1.09

Editar documentos Office en aplicación .NET

Actualmente estoy trabajando en un proyecto que requiere que los usuarios puedan editar documentos desde la aplicación. Antes de programar nada te preguntas:
  • ¿Qué tipo de documentos va a editar el usuario?
  • ¿El editor debe estar integrado con la aplicación?
Un par de preguntas que pueden conllevar muchos quebraderos de cabeza a los programadores dependiendo de la respuesta. Si tienes la mala suerte de que la respuesta a la primera pregunta es que el usuario va a editar documentos .DOC, .XLS o parecidos (documentos de Microsoft Office), y que además la respuesta a la segunda pregunta es que si, que el editor debe estar integrado en la aplicación, entonces tienes un problema.

Hay muy pocos controles para edición de documentos que soporten los formatos de documento de Office a un nivel que haga viable su uso en aplicaciones que requieran editar documentos medianamente complejos, y para desgracia de los programadores, el office es cada vez más complicado de integrar en tu aplicación. Microsoft ha optado por la vía contraria, que el programador integre la aplicación dentro del Office.

Entre las pocas opciones que hay disponibles se encuentra TX TEXTCONTROL, un control para edición de documentos que soporta .DOCX, .DOC, RTF, PDF, HTML y otros muchos formatos, pero como era de esperar no soporta .XLS o PowerPoints.

Por lo tanto si necesitas editar documentos Office en general básicamente nos quedamos con que necesitamos el Office, que no podemos integrar, o adquirir distintos controles para cada formato que queramos soportar.

Pero existe una alternativa a la que podemos recurrir en estos casos. Todo el mundo, o casi todo el mundo, conoce OpenOffice, una suite ofimática que es capaz de tratar documentos de Office de forma bastante fiel. Pero lo que nos importa a nosotros como programadores es que OpenOffice dispone de un SDK que nos proporciona las herramientas necesarias para integrar OpenOffice en nuestras aplicaciones, cosa que nos permitirá cumplir con los dos requisitos que teníamos, poder editar documentos de Office y tener el editor integrado en nuestra aplicación, y como añadido tenemos que no nos va a costar ni un Euro.

Web de OpenOffice
Web del SDK de OpenOffice
Articulo práctico con el SDK de OpenOffice y C++ (en CodeProject)
OpenOffice para desarrolladores
Foro de discusión sobre el SDK de OpenOffice

29.10.08

ItextSharp edición i creación de ficheros PDF en .NET

Seguro que a más de uno le pasa como a mí i necesita poder modificar documentos PDF desde aplicaciones .NET, ya sea para firmar esos documentos, para añadir páginas, para quitar páginas, etc.

Bien, pues hay una librería llamada IText que permite hacer esto, pero desgraciadamente para nosotros, los programadores de .NET, está programada en Java. Pero como hay gente muy generosa y dedicada resulta que existe ITextSharp, que no es más que el port de Itext a C#, o sea, que tenemos las funcionalidades de IText disponibles para entornos .NET.

ItextSharp nos permite desde crear un documento PDF partiendo de cero hasta modificar documentos PDF existentes, firmar digitalmente estos documentos, añadir y quitar contenido, juntarlos, dividirlos, … básicamente nos permite realizar casi cualquier operación que se nos ocurra con un documento PDF desde una aplicación en .NET.

Para aquellos que queráis saber más sobre ITextSharp os recomiendo unos cuantos enlaces:

Página del proyecto IText: no es propiamente sobre ITextSharp, es sobre iText, pero como he dicho, iTextSharp no es más que un port de iText a c#, por lo tanto aquí encontrareis documentación abundante sobre las funcionalidades y las API de ITextSharp.

Página de ITextSharp en SourceForge: esta es la página donde encontrareis las DLLs y el código de la versión C# de IText.

Os recomiendo echar también un vistazo a la lista de correo de IText, donde hay abundante información proporcionada por sus programadores a los usuarios que tienen dudas.

Y para los que queráis entrar en detalle, los chicos de iText han editado un libro que podréis encontrar en la página de iT3xt.

5.9.08

Como aumentar el tamaño máximo de los ficheros a cargar en IIS+ASP.NET

Uno de los problemas recurrentes a la hora de trabajar con servicios web es que cuando debes crear servicios web que traten ficheros te encuentras con una limitación en el tamaño de los ficheros que se pueden tratar.

Normalmente este límite está establecido en 4MB, un límite más que razonable si consideras que se trabaja conectándose a un servidor de Internet.

Pero más de una vez se puede dar el caso de que el servicio Web esté dentro de la misma red que los clientes, y que necesitemos aumentar este límite para tratar ficheros grandes, digamos que de más de 10MB.

Para hacer esto deberemos modificar la configuración del servidor IIS donde esté funcionando el servicio web, así como la configuración del mismo servicio web.

Vamos por partes.

Eliminar el límite de tamaño para los ficheros que se pueden subir a un servidor IIS

El servidor web IIS 6.0 establece este límite usando una variable llamada AspMaxRequestEntityAllowed, para modificar esta variable tendremos que seguir unos senzillos pasos:
  1. En el servidor IIS, abrimos una consola de comandos
  2. Vamos al directorio c:\inetpub\Adminscripts (o si hemos modificado el directorio por defecto del IIS, al directorio que hayamos establecido).
  3. Ejecutamos los siguientes comandos:
cscript adsutil.vbs set w3svc/AspMaxRequestEntityAllowed "1073741824"
cscript adsutil.vbs set w3svc/{numeroServidorWebVirtual}/AspMaxRequestEntityAllowed "1073741824"
y finalmente Reiniciamos el servicio IIS

NOTA: 1073741824 es el valor máximo para la variable AspMaxRequestEntityAllowed.

Aumentar el límite de tamaño para los ficheros que puede tratar ASP.NET

Para los servicios web el límite se establece en el fichero Web.config correspondiente, en este caso basta con añadir una línea como:

<httpRuntime maxRequestLength="2097151"/>

El valor de maxRequestLength debe estar comprendido entre 0 y 2097151

Y con estos senzillos pasos ya tenemos nuestro servicio web configurado para tratar con ficheros de cualquier tamaño que deseemos.

27.5.08

Librería de algoritmos genéticos.

Hoy me voy a salir un poco, por no decir bastante, del tema general del blog. Vamos a hablar de una librería programada en C++, en concreto de una librería que implementa algoritmos genéticos.

Hace ya algunos años (allá por el 2000-2001) realicé mi proyecto final de carrera. En aquel entonces colaboraba con el departamento de visión por computador y robótica submarina (VICOROB) de la Universidad de Girona, y como proyecto final de carrera desarrollé un path planner, usando algoritmos genéticos y basado en las teorías de Hans Moravec, para el robot submarino que se desarrollaba en el departamento. Esos fueron unos años muy interesantes para mí, y cada vez que veo algoritmos genéticos me vienen a la cabeza los recuerdos de aquellos tiempos.

Hoy he recibido el boletín mensual de CodeProject y para mi sorpresa se mencionaba una librería que implementa algoritmos genéticos usando .NET, no he podido evitar echarle un vistazo al artículo, y la verdad es que es muy pero que muy completo.

Siempre he pensado en re implementar mi proyecto usando .NET y creando un simulador para poder ver cómo se comporta el algoritmo, quizás ha llegado el momento de hacerlo.

15.5.08

ToDoList un organizador de tareas de lo más útil

Hace un tiempo me topé, rondando por CodeProject, con un proyecto bastante interesante. Básicamente es una herramienta para la gestión de tareas, pero muy útil cuando empiezas a cogerle el tranquillo. La herramienta en concreto se llama ToDoList (original eh?).

ToDoList nos permite gestionar nuestras tareas (en la última versión podemos gestionar tareas para más de 1 persona), a las tareas les podemos asignar un tiempo previsto, una fecha para las que deben estar finalizadas, podemos contar el tiempo que invertimos en cada tarea, podemos asignar tareas a otras personas, podemos crear tareas dependientes de otras tareas, incluso subtareas. En fin, que cuando empiezas a usar el programa te das cuenta de que en realidad se puede usar como un Project Tracker sencillo para una persona sola o para equipos pequeños.

Después de un tiempo usando este programa me he convertido en un fan, realmente está muy bien conseguido y tiene todo lo que necesito como programador para organizar mi tiempo sin necesidad de utilizar herramientas complicadas como Ms Project y similares. Además me permite contar el tiempo real invertido en cada tarea e incluso compartir tareas con los compañeros.

ToDoList es, desde mi punto de vista, una pequeña maravilla que facilita mucho el día a día de un programador.

Enlace a la web de ToDoList
Enlace al artículo de CodeProject sobre ToDoList

14.5.08

Disponible Moonlight 1.0

Los chicos de Mono están trabajando a destajo últimamente, si hace un momento comentaba que ya está disponible el soporte para Windows.Forms 2.0 en Mono, ahora me entero de que ya está también disponible Moonlight 1.0, que por si alguien se lo pregunta es la versión para sistemas Unix de Silverlight, la plataforma .NET para navegadores que está promocionando la gente de Microsoft a diestro y siniestro.