Developer's Diary

20 mayo, 2013

Creando PDF en C# (Apache Fop I)

Filed under: .net, BBDD, Curso C#, Programación, Uncategorized, Web — Etiquetas: , , , , , , , — jnavero @ 7:34 AM

Voy a hablar de como crear un PDF en C# de forma muy sencillita. En este articulo introductorio hablaré de FOP, como instalarlo y voy a generar el primer Hola mundo en PDF.

¿Qué veremos en esta serie de artículos?

En principio, en este primero pasos básicos instalación y breve explicación de FOP así como enlaces de interés y demás.

En los siguientes hablaré de plantillas en XSL e introducción de datos en XML. Así como el formato en pseudo CSS.

He hablado de FOP, pero ¿que es FOP?

Fop es el acrónimo de Formatting Objects Processor. En español, un procesador de formatos, estos formatos están impulsados por XSL-FO y un formateador independiente de salida. Es una aplicación basada en Java que lee un árbol de formato y las paginas resultantes les da un formato indicado. Hay diferentes formatos como son PDF o PS (entre otros). Aquí trataremos los PDF.

Es un proyecto de Apache aquí dejo la web oficial http://xmlgraphics.apache.org/fop/

Instalando FOP En nuestro proyecto de C#.

Como siempre, en nuestro visual studio, vamos a Archivo — Nuevo proyecto, seleccionamos nuestro lenguaje favorito (debe ser Framework 4 o superior) en mi caso, las pruebas las haré en 4.5

Seleccionamos el proyecto con el botón derecho y nos vamos al NuGet.

y buscamos en las plantillas en línea FOP (como se ve en la imagen).

nugetFop

Pulsamos sobre instalar y nos IKVM así como el FOP. No voy a entrar mucho en el tema pero solamente mencionar que IKVM son los paquetes que se utilizan en .NET para “Emular” por así decirlo los paquetes de java y de esta forma poder utilizar espacios de nombres de java en .NET.

Una vez instalado esto si vemos las referencias habrá una marabunta de archivos entre los que se encuentran todos los relacionados al IKVM comentado, al FOP que nos interesa y por supuesto los normales de .NET.

A por el primer proyecto Hola mundo en PDF.

En mi formulario he creado un botón donde meteré el código necesario para hacer el hola mundo en pdf. Este es el código que he metido en el: 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

//Espacios de nombre de java necesarios para usar FOP
using org.apache.fop.apps;
using java.io;
using javax.xml.transform;
using javax.xml.transform.stream;
using javax.xml.transform.sax;

namespace Devthisblog_FOP
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private void btnHolaMundo_Click(object sender, EventArgs e)
{
//NOTA: ESTE EJEMPLO ESTÁ BASADO EN EL DE LA PAGINA DE APACHE
//PASO 1: Construimos el FopFactory
FopFactory fopFactory = FopFactory.newInstance();

//PASO 2: Configuramos la salida
OutputStream salida = new BufferedOutputStream(new FileOutputStream(new File("HolaMundo.pdf")));

try
{
//PASO 3: Indicamos el formato de salida
Fop fop = fopFactory.newFop("application/pdf", salida); //Solamente nos centraremos en el PDF que es el que nos interesa

//PASO 4: Configuracion del identificador de transformacion
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(); // Identificador

//PASO 5: Cargamos nuestra plantilla Hello.fo
Source src = new StreamSource(new File("Hello.fo"));

//El resultado es canalizado a través del FOP
Result res = new SAXResult(fop.getDefaultHandler());
//Result res = new StreamResult(salida);

//PASO 6: Hacemos la transformacion
transformer.transform(src, res);
MessageBox.Show("PDF CREADO...");
}
finally
{
salida.close(); //Cerramos la salida.
}
}
}
}

Este código coge la plantilla XSL y la pasa a PDF. Aquí dejo también la plantilla necesaria para el ejemplo que he descrito anteriormente. dicha plantilla debe estar junto al código anterior (por el tema del path)

Hola Mundo!

En próximos post hablaré de la plantilla detenidamente, aunque es muy fácil intuir lo que hace esta. Para no extenderme mas, aquí finalizo el primer post de la serie FOP para crear PDF con C#.

Saludos a todos.

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: