Génération d’un PDF depuis une JSP avec iText5 et iText7

NOTA : la version utilisée dans cette première version est la iText5 une prochaine version utilisera la nouvelle version iText7

En premier lieu il faut récupérer les bibliothèques jar suivantes:

  • itextpdf-5.5.13.3.jar
  • log4j-1.2.16.jar
  • slf4j-api-1.7.9.jar
  • slf4j-log4j12-1.7.13.jar

Placer ces fichiers dans le dossier WebContent/WEB-INF/lib de votre application Dynamic Web Application , les sélectionner et faire click droit > Build Path > Add to Build Path

Vous pouvez maintenant coder une simple JSP pour générer un ficheir PDF. Attention, si vous cette erreur « getOutputStream() has already been called for this response » il faut retirer tout espace ou retour chariot qui pourrait être interprétés par la JSP comme du HTML à envoyer donc tout se trouve sur une seule ligne pour les tag JSP de type <%@page import %>:

<%@ page language="java" contentType="application/pdf; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%><%@page import="com.itextpdf.text.Document" %><%@page import="com.itextpdf.text.PageSize" %><%@page import="com.itextpdf.text.Paragraph" %><%@page import="com.itextpdf.text.pdf.PdfWriter" %><%
Document document = new Document(PageSize.A4, 36, 36, 36, 72);

PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"todo.pdf\"");

document.open();
document.add( new Paragraph ("Hello world"));
document.add( new Paragraph ("Bonjour le monde"));
document.close();
writer.close();
%>

Version iText7

Pour la version iText7, après avoir ajouté les bilbiothèques suivantes en remplacement de celles de iText5:

  • barcodes-7.2.1.jar
  • commons-7.2.1.jar
  • font-asian-7.2.1.jar
  • forms-7.2.1.jar
  • hyph-7.2.1.jar
  • io-7.2.1.jar
  • kernel-7.2.1.jar
  • layout-7.2.1.jar
  • log4j-1.2.16.jar
  • pdfa-7.2.1.jar
  • pdftest-7.2.1.jar
  • sign-7.2.1.jar
  • slf4j-api-1.7.9.jar
  • slf4j-log4j12-1.7.13.jar
  • styled-xml-parser-7.2.1.jar
  • svg-7.2.1.jar

Du coup le code pour la JSP est similaire avec l’utilisation d’un ByteArrayOutputStream pour gérer le PDF en mémoire.

<%@ page language="java" contentType="application/pdf; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%><%@ page import="com.itextpdf.io.source.ByteArrayOutputStream" %><%@ page import="com.itextpdf.kernel.pdf.PdfDocument" %><%@ page import="com.itextpdf.kernel.pdf.PdfWriter" %><%@ page import="com.itextpdf.layout.Document" %><%@ page import="com.itextpdf.layout.element.Paragraph" %><%
ByteArrayOutputStream memory = new ByteArrayOutputStream();
Document document = new Document(new PdfDocument(new PdfWriter(memory)));
document.add( new Paragraph ("Hello world"));
document.close();
ServletOutputStream servletOutputStream = response.getOutputStream();
servletOutputStream.write(memory.toByteArray());
servletOutputStream.flush();
servletOutputStream.close();
%>

A propos Pierre Jean

Ingénieur de Recherche CERIS Centre d'Enseignement et de Recherche en Informatique et Systèmes IMT Mines Alès UMR Euromov DHM Plus de détails sur Pierre JEAN
Ce contenu a été publié dans Développement. Vous pouvez le mettre en favoris avec ce permalien.