Créer un PDF à partir d'images

Aller en bas

Créer un PDF à partir d'images Empty Créer un PDF à partir d'images

Message  Gus le Jeu 22 Sep - 8:20

Il arrive qu'on ait un répertoire rempli de fichiers JPEG et qu'on réalise que ces images sont les pages d'un unique document. On aimerait bien alors pouvoir générer un unique fichier PDF pour les regrouper.

Cela se fait facilement avec l'API de manipulation de PDF : iText. Je vais vous montrer comment.

Code:

   public static void buildFromDir(File dir) throws Exception
   {
      File pdfFile = new File(dir.getAbsolutePath()+".pdf");
      File[] jpeg = dir.listFiles(FILTER_JPEG);
      
      if(jpeg.length==0) return;
      
      Image im0 = Image.getInstance(jpeg[0].getAbsolutePath());
      Rectangle pageSize = new Rectangle(im0.plainWidth(),im0.plainHeight());
      Document document = new Document(pageSize,0,0,0,0);
      
      FileOutputStream fos = new FileOutputStream(pdfFile);
      PdfWriter writer = PdfWriter.getInstance(document,fos);
      
      System.out.println("opening pdf file: "+pdfFile);
      document.open();
      
      for(int i=0;i<jpeg.length;i++)
      {
         System.out.println("adding jpeg file: "+jpeg[i]);
         
         Image im = Image.getInstance(jpeg[i].getAbsolutePath());
         im.scaleToFit(pageSize.width(),pageSize.height());
         im.setAlignment(Element.ALIGN_CENTER);
          document.add(im);
          document.newPage();
      }
      
      System.out.println("closing pdf");
      System.out.println();
      
      document.close();
       fos.close();
       writer.close();
   }

Vous avez ici un exemple d'utilisation ou un répertoire est passé en variable de la méthode statique buildFromDir, supposé contenir des fichiers d'image (d'un format pris en charge par iText : JPEG bien sûr mais aussi GIF ou PNG). Un fichier PDF va être crée juste à coté du répertoire, avec le même nom que ce dernier.

L'idée consiste à ajouter successivement chaque image au document dans un boucle, grâce au code suivant :

Image im = Image.getInstance(jpeg[i].getAbsolutePath());
im.scaleToFit(pageSize.width(),pageSize.height());
im.setAlignment(Element.ALIGN_CENTER);
document.add(im);
document.newPage();


La petit astuce se trouve dans le choix de la taille de page du PDF, qui est fixé égal à la taille de la toute première image (on considère que toutes les images ont ensuite la même taille puisque ce sont les pages d'un même document, ce qui n'est pas forcément toujours le cas mais en même temps, ce n'est pas bien grave).

Voilà ! Cela vous permettra de diminuer considérablement le nombre de fichiers de votre répertoire de scan car je suis sûr qu'il n'y a pas si longtemps vous scanniez encore vos documents page par page dans des fichiers différents. Rolling Eyes
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum