Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Servlet d'exportation de données au format PDF

Servlet d'export de données au format XLSX Génération d'un WAR et déploiement



Accès rapide :
La vidéo
La librairie IText
Le code

La vidéo

Cette vidéo vous apprend à coder une servlet d'export de données au format PDF. L'exemple proposé permet de générer une facture avec les données d'une commande. La librairie utilisée pour la production du PDF est IText.


Servlet d'export de données au format PDF

La librairie IText

La librairie IText permet de générer des fichiers au format PDF à partir d'une application Java (ou .NET). Cette librairie et ses documentations sont disponibles à partir de l'adresse suivante : itextpdf.com.

Une possibilité très intéressante qui est utilisée dans l'exemple de code proposé, consiste à pouvoir ouvrir un document PDF initial, servant de matrice, puis de pouvoir rajouter par dessus les informations manquantes. Cela vous évite de devoir produire un code Java trop complexe : les éléments statique (logos, textes, ...) ne seront pas programmés car déjà présent dans le PDF initial. Cela peut, par exemple, s'avérer très pratiques pour produire des factures clientes. C'est ce scénario qui est proposé dans la vidéo ainsi que dans l'exemple ci-dessous.

Le code

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
 73 
 74 
 75 
 76 
 77 
 78 
 79 
 80 
 81 
 82 
 83 
 84 
 85 
 86 
 87 
 88 
 89 
 90 
 91 
 92 
 93 
 94 
 95 
 96 
 97 
 98 
 99 
 100 
 101 
 102 
 103 
 104 
 105 
 106 
 107 
 108 
 109 
 110 
 111 
 112 
 113 
 114 
package fr.koor.webstore.servlet;

import java.io.IOException;
import java.text.NumberFormat;
import java.util.Locale;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.itextpdf.io.font.FontProgram;
import com.itextpdf.io.font.FontProgramFactory;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;

import fr.koor.webstore.business.Article;
import fr.koor.webstore.business.ShoppingCartLine;

@WebServlet( "/pdfexport" )
public class PDFExport extends HttpServlet {

    private static final long serialVersionUID = 7609134248482865644L;

    
    @Override
    protected void doGet( HttpServletRequest request, HttpServletResponse response )
            throws ServletException, IOException {
        
        int idCommand = 0;
        try { 
            idCommand = Integer.parseInt( request.getParameter( "idCommand" ) );
        } catch (Exception exception ) {
            // Nothing to do
        }
        ShoppingCartLine [] lines = {
            new ShoppingCartLine( new Article( 1, "Stylo bille", "Bic", 0.2 ), 5 ),
            new ShoppingCartLine( new Article( 18, "Bonbon", "Haribo", 0.1 ), 50 ),
        };
        
        String masterPath = request.getServletContext().getRealPath( "/WEB-INF/FacMaster.pdf" );
        response.setContentType( "application/pdf" );
        
        try ( PdfReader reader = new PdfReader( masterPath );
              PdfWriter writer = new PdfWriter( response.getOutputStream() );
              PdfDocument document = new PdfDocument( reader, writer ) ) {
            
            PdfPage page = document.getPage( 1 );
            PdfCanvas canvas = new PdfCanvas( page );
            
            FontProgram fontProgram = FontProgramFactory.createFont();
            PdfFont font = PdfFontFactory.createFont( fontProgram, "utf-8", true );
            canvas.setFontAndSize( font, 12 );
            
            canvas.beginText();
            
            canvas.setTextMatrix( 0, 0 );
            canvas.showText( "Origine" );
            
            canvas.setTextMatrix( 470, 760 );
            canvas.showText( "" + idCommand );
            
            int top = 500;
            double totalPrice = 0;
            NumberFormat formatter = NumberFormat.getNumberInstance( new Locale( "fr", "FR" ) );
            
            for (ShoppingCartLine line : lines) {
                Article article = line.getArticle();
                
                canvas.setTextMatrix( 116, top );
                canvas.showText( "" + article.getIdArticle() );

                canvas.setTextMatrix( 200, top );
                canvas.showText( article.getDescription() );

                canvas.setTextMatrix( 270, top );
                canvas.showText( article.getBrand() );

                canvas.setTextMatrix( 341, top );
                canvas.showText( formatter.format( article.getUnitaryPrice() ) );

                canvas.setTextMatrix( 412, top );
                canvas.showText( "" + line.getQuantity() );

                double totalLine = article.getUnitaryPrice() * line.getQuantity();
                totalPrice += totalLine;
                canvas.setTextMatrix( 482, top );
                canvas.showText( formatter.format( totalLine ) );
                
                top -= 20;
            }
            
            canvas.setTextMatrix( 482, 240 );
            canvas.showText( formatter.format( totalPrice ) );

            canvas.setTextMatrix( 482, 216 );
            canvas.showText( formatter.format( totalPrice * 0.2 ) );

            canvas.setTextMatrix( 482, 192 );
            canvas.showText( formatter.format( totalPrice * 1.2 ) );
            
            canvas.endText();
            
        }
        
    }
    
}
Servlet d'export de données au format PDF


Servlet d'export de données au format XLSX Génération d'un WAR et déploiement