miércoles, 20 de junio de 2007

POI en Java

En mi busqueda por encontrar algunas librerias para leer plantillas Word y convertirlas en documentos, tuve muchas maneras de hacerlo y en un principio me decidi por utilizar las las APIs SDK de StarOffice y OpenOffices pero tuve algunos problemas el codigo era correcto pero al momento de ejecutar el proyecto no encontraba el ejecutable swriter de open office asi que si saberlo la solucion siempre estubo conmigo y recorde que en algun tiempo para realizar unos reportes a excel utilice una libreria que se pueden descargar de http://jakarta.apache.org/site/downloads/index.html, la libreria esta casi al final de lista que aparece en la parte izquierda de la pagina y se llama POI, una libreria en un principio desarrollada para el tratamiento de documentos XML y posteriormente vieron que era bueno y salio HSSF para el tratamiento de archivo XLS y finalmente como ultima entrega de este año salio HWPF para el tratamiento de documentos WORD, cabe mencionar que como libreria va iniciando no encontraran mucha informacion y mas que nada ejemplos de como utilizarla pero bueno con un poko de conocimiento en cuanto a tratamiento de archivos PDF, Excel que he tenido con otras librerias como lo es iTextSharp y el API OpenOffice me di a la tarea de iniciar con mi propio ejemplo de como utilizarla, cabe mencionar que solo la utilizo para abrir una plantilla .dot en una pagina web y posteriormente actualizo el documento y lo subo a mi servidor, esta ultima parte no la veremos, solo dejare el ejemplo simple y sencillo que despliega un documento utilizando un servlet para su visualizacion.

1.- Primero nos descargamos la libreria POI, de preferencia la ultima entrega que es del 2007.

2.- Ya que se tiene la libreria creamos un aplicacion WEB, para lo cual utilizo el entorno de desarrollo netbeans.

3.- Abrimos el jsp que se llama index.jsp y añadimos un control html form, al cual le colocaremos un boton de tipo Submit que solo invocara el servlet que hara todo el trabajo para la visualziacion del documento.

Asi quedo mi jsp:








Por cierto el servlet se llama Download.

4.- Acto seguido es crear un Servlet dentro de un paquete que llamaremos DownLoad, asi como el nombre de nuestro Servlet.

5.- Seguimos y colocamos las siguientes referencias en nuestro servlet:

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

debo suponer que las librerias (.jar) de POI ya han sido referenciadas a nuestro proyecto.

6.- Iniciamos con el codigo:

a) Creamos una instancia a la clase InputStream para leer la plantilla al tiempo que especificamos donde reside dicha plantilla.

InputStream stream = new FileInputStream("/root/documentos/etapas.dot");
HWPFDocument doc = null;
POIFSFileSystem fs;

al mismo tiempo declaramos un HWPFDocument que sera el repositorio de la plantilla, asi como un POIFSFileSystem para colocar de manera temporal el contenido del stream.

b)Colocamos la informacion dentro de nuestro documento creado que le llamos "doc":

try
{
fs = new POIFSFileSystem(stream);
doc = new HWPFDocument(fs);
}
catch (IOException e)
{
}

c) Finalmente colocamos el codigo que enviara nuestro documento a un espacio de memoria reservado.

try
{
response.setContentType("application/msword");
ServletOutputStream outputStream = response.getOutputStream();
doc.write(outputStream);
outputStream.flush();
outputStream.close();
}
catch(Exception ex)
{

}

Recuerden que deben colocar el tipo de documento que deseamos ejecutar en este caso sera un documento Word y no importa que gestor de documentos utilice.

Reservamos nuestra variable ServletOutStream, salida para el docuento, escribimos el documento en nuestra variable y listo al ejecutar nuestro servlet aparecera en nuestra pagina web una ventana en la cual nos indicara que se desea hacer con el archivo si guardarlo o abrirlo.

Bueno eso seria todo, tal vez no soy muy bueno explicando pero este codigo se explica por si solo, por cierto el documento todo el contenido de la plantilla pero tambien es posible iniciar desde cero un documento HWPFDocument.

5 comentarios:

Unknown dijo...

Hola, ando buscando como hacer ciertas cosas con word y llegue a su blog, el kee del asunto es que en la direccion del Apache no encuentro la .jar solo aparecen los archivos de linux y necesito la jar para poder trabajar.. al menos si pudera especificarme un poco mas de donde sacarla.. lo que necesito es comparar documentos WORD.. pero no doy con la version de poi que permite leer words...

gracias de antemano por la ayuda

Rulo dijo...

la pagina para descargar la libreria de POI es http://poi.apache.org/ espero te sea util

John dijo...

Muy interesante ejemplo y gracias por compartir un poco de tu experiencia, no hay mucho en nuestro idioma, pero no tendars un ejemplo mas completo, como por ejemplo; si se pueden escribir tablas en el documento, o insertar imagenes, . . algo asi.

Rulo dijo...

Hola Jonh hace algun tiempo que hice un ejemplo sobre este framework que enviame tus datos para hacerte llegar un ejemplo más completo, también te recomiendo visitar el proyecto POI en Apache Foundation

@narquia_99 dijo...

Hola, buscando..... buscando.... muy buen post... lo que busco es leer un dot y crear tablas y otras cosas si tienes algo que me pueda ayudar.... georgeherresan@hotmail.com gracias