NFop : Génération de fichier PDF avec.net

Documents pareils
1 INTRODUCTION ET OBJECTIFS GÉNÉRATION DE PDF AVEC.NET LES SOLUTIONS DE BI AVEC.NET...13

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Notions fondamentales du langage C# Version 1.0

Programme Compte bancaire (code)

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Projet de programmation (IK3) : TP n 1 Correction

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Notes de cours Practical BigData

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Environnements de développement (intégrés)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Serveur d'archivage 2007 Installation et utilisation de la BD exist

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Corrigé des exercices sur les références

Programmation Par Objets

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Java Licence Professionnelle CISII,

Utiliser Java sans BlueJ

Cours 1: Java et les objets

Programmer en JAVA. par Tama

Remote Method Invocation Les classes implémentant Serializable

Développement Logiciel

TP1 : Initiation à Java et Eclipse

Auto-évaluation Programmation en Java

as Architecture des Systèmes d Information

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Calcul Parallèle. Cours 5 - JAVA RMI

Flux de données Lecture/Ecriture Fichiers

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

ACTIVITÉ DE PROGRAMMATION

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

LOG4430 : Architecture logicielle et conception avancée

Reporting Services - Administration

INITIATION AU LANGAGE JAVA

Plan du cours. Historique du langage Nouveautés de Java 7

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Cours 14 Les fichiers

Synchro et Threads Java TM

Maîtriser le menu contextuel dans un OfficeBean

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Hébergement et configuration de services WCF. Version 1.0

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Package Java.util Classe générique

RMI le langage Java XII-1 JMF

Rafraichissement conditionné d'une page en.net

TP Programmation Java / JDBC / Oracle

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Module.NET 3 Les Assemblys.NET

Approche Contract First

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

7 Développement d une application de MapReduce

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Introduction à. Oracle Application Express

Dis papa, c est quoi un bus logiciel réparti?

Le Modèle de Sécurité dans JAVA

TP1 : Initiation à Java et Eclipse

Langage Java. Classe de première SI

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Premiers Pas en Programmation Objet : les Classes et les Objets

TD3: tableaux avancées, première classe et chaînes

Tutoriel d installation de Hibernate avec Eclipse

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Utilisation d objets : String et ArrayList

Java DataBaseConnectivity

Introduction au langage Java

Vue d ensemble de Windows PowerShell

SP1 : Intégration d'une vidéo dans une mardi 21/01/2014. page web, fonction du format vidéo et 3 mercredi 22/01/2014

Programmation Objet Java Correction

Programmation en Java IUT GEII (MC-II1) 1

arcopole Studio Version 3.3

Systeme d'exploitation

Développement XNA. pour la Xbox et le PC. Premiers pas en développement de jeu vidéo. Léonard Labat

Catalogue des Formations Techniques

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Sébastien Sougnez 24/12/ / s.sougnez@areaprog.com 2 ans et demi d expérience

Certificat Big Data - Master MAthématiques

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Dans l'article précédent, vous avez appris

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Travaux Pratiques : Lucène - Gestion d un index plein texte

ADO.NET. Ado.net propose deux modes d'accès, le mode connecté et le mode déconnecté.

Déploiement et monitoring

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Architecture Orientée Service, JSON et API REST

Eclipse atelier Java

Applet pour visualiser les variables «automate» notifiées

Une introduction à Java

Généralités sur le Langage Java et éléments syntaxiques.

Gestion du cache dans les applications ASP.NET

La base de données XML exist. A. Belaïd

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Master d Informatique Corrigé du partiel novembre 2010

Transcription:

NFop : Génération de fichier PDF avec.net Introduction FOP ( Formatting Objects Processor ) est un outil de formatage d impression piloté par XSL. C est une application qui lit un arbre d objets de formatage et qui génère les pages résultantes dans un format donné. Pour l instant les formats de rendus suivant sont supportés : PDF, PCL, PS, SVG, XML, Print, AWT, MIF et TXT. PDF étant le format de prédilection. NFop est le portage par Jason Pettys en Visual J# du projet Apache FOP sur la plateforme.net. NFop est disponible sur le site SourceForge à l adresse suivante : http://sourceforge.net/projects/nfop/ Afin de pouvoir utiliser NFop vous avez bien sûre besoin du Framework.NET et devez avoir au minimum le «Microsoft Visual J#.NET Redistributable Package» que vous pouvez télécharger ici : http:// Cette article va vous montrer comment créer à l aide de NFop un document PDF en partant de documents XML et XSL. Pour cette présentation j ai rédigé l article à l aide de Word et j ai utilisé un petit utilitaire crée en Java qui se nomme wh2fo (version 0.3.1) afin de générer très facilement le fichier XML et XSL permettant de générer le fichier FOP. Vous pouvez trouver cet utilitaire à l addresse web suivante : http:// Méthode Afin de pouvoir créer un fichier PDF à l aide de NFop il y a deux possibilités : 1. Création depuis un fichier FOP d un fichier PDF 2. Transformation d un fichier XML à l aide de XSLT en un fichier intermédiaire FOP puis génération du fichier PDF Dans les deux cas nous utilisons NFop pour générer le fichier PDF. Pour cela nous pouvons créer une méthode qui accepte en paramètre entrant une chaîne de caractères contenant les instructions FOP et une autre string représentant le chemin du fichier PDF à sauver. static protected void Transform ( string xmldocfo, string strfilename ) // Run the full FO doc through the engine to create a pdf Engine e = new Engine ();

try sbyte [] spdf = e.run ( xmldocfo ); int sz = spdf.length ; byte [] pdf = new byte [ sz ]; for ( int i=0; i< sz ; i++) pdf [i] = ( byte ) spdf [i]; // Write output file FileStream fs = new FileStream ( strfilename, FileMode.Create ); BinaryWriter sw = new BinaryWriter ( fs ); sw.write ( pdf ); sw.close (); fs.close (); catch ( org.apache.fop.apps.fopexception fope ) Console.WriteLine ( fope.getrootexception (). getmessage () ); Pour pouvoir utiliser ce code il faut : 1. Renommer Fop.Net.dll que vous avez téléchargé en ApacheFop.dll 2. Ajouter une référence à ApacheFop.dll 3. Ajouter une référence à vjslib.dll installé par le «Microsoft Visual J#.NET Redistributable Package» 4. Ajouter using ApacheFop ; On remarque que toutes la transformation est faite à l aide de deux lignes de code : Engine e = new Engine( ); sbyte [ ] spdf = e.run ( xmldocfo ); Implémentation Afin de créer un petit utilitaire qui va servir à la transformation dans les deux cas, créer un nouveau projet de type «Console Application». Ajouter les références comme expliquer un peu plus haut. Puis modifier votre projet pour obtenir : using System; using System.IO ;

using System.Xml ; using System.Xml.Xsl ; using ApacheFop ; namespace Fop class Transformer [ STAThread ] static void Main( string [] args ) if ( args.length == 3 ) XmlDocument datadoc = new XmlDocument (); datadoc.load ( args [0] ); // Transformation du XML en FOP à l'aide de XSLT XslTransform xslt = new XslTransform (); xslt.load ( args [1] ); StringWriter fullfodoc = new StringWriter (); xslt.transform ( datadoc.createnavigator (), null, fullfodoc ); //Transformation du FOP en PDF Transform ( fullfodoc.tostring (), args [2] ); else if ( args.length == 2 ) StreamReader sr = new StreamReader ( args [0] ); else //Transformation du FOP en PDF Transform ( sr.readtoend (), args [1] ); Console.WriteLine ("Usage: fop.exe file.xml file.xsl file.pdf "); Console.WriteLine (" or fop.exe file.fo file.pdf "); /// < summary > /// Transform a XmlFo document in a pdf and save the pdf to a file /// </ summary > /// < param name =" xmldocfo "> string containing the Fo document </ param >

</ param > /// < param name =" strfilename "> string representing the path to the output file static protected void Transform ( string xmldocfo, string strfilename ) // Run the full FO doc through the engine to create a pdf Engine e = new Engine (); try sbyte [] spdf = e.run ( xmldocfo ); int sz = spdf.length ; byte [] pdf = new byte [ sz ]; for ( int i=0; i< sz ; i++) pdf [i] = ( byte ) spdf [i]; ); // Write output file FileStream fs = new FileStream ( strfilename, FileMode.Create BinaryWriter sw = new BinaryWriter ( fs ); sw.write ( pdf ); sw.close (); fs.close (); catch ( org.apache.fop.apps.fopexception fope ) Console.WriteLine ( fope.getrootexception (). getmessage () ); Si l utilitaire est appelé avec trois paramètres, c'est-à-dire un fichier XML, un fichier XSL et le chemin de sauvegarde du fichier PDF, alors le fichiers XML est chargé en mémoire à l aide d un objet XmlDocument et est transformé en FOP à l aide du fichier XSL et d un objet XslTransform. Puis la méthode Transform qui transforme un fichier FOP en PDF est appelée à l aide du résultat de la transformation et du chemin de sauvegarde du fichier PDF. Dans le cas ou l utilitaire est appelé avec deux paramètres, le programme charge le fichier FOP représenté par le premier paramètre à l aide d un objet StreamReader et appelle la méthode Transform qui va transformer ce fichier FOP en PDF. Conclusion

L utilisation de XML et de NFop permet de créer un ensemble de document dans différent format. Pour ma part j utilise cette technique pour écrire les articles que je publie sur mon site web Tech Head. J écris un article dans un format XML et j ai un template XSL pour publier l article sur Tech Head, un autre pour le site Codeproject et un dernier pour générer un fichier PDF pour Tech Head. Cela me permet d écrire un article une seule fois et de le publier sur différent site sans avoir à retoucher chaque rendu. Bien que le portage ne soit pas encore complet cette version de NFop permet de faire pas mal de chose déjà et permet un gain de temps énorme.