lunes, 27 de abril de 2020

PDF con Itext (1). Dividiendo un PDF en grupos de 2 páginas.

0. Introducción


Una aplicación externa nos genera un solo PDF con información relativa a varios trabajadores, con las siguientes particularidades:
  1.  El documento específico de cada trabajador ocupa 2 páginas.
  2.  La estructura del documento es la misma, solo cambian los datos específicos para cada trabajador.
  3. Por tanto si hay 100 páginas, sabemos que corresponden a 50 trabajadores
Por tanto hay que fraccionar el documento de 100 páginas en 50 documentos de 2 páginas.


1. Solución propuesta

  1. Utilizaremos la librería Java IText 7 Community.
  2. Partimos de la localización inicial del documento en la constante RESOURCE.
  3. Le indicamos la ruta donde guardar los ficheros generados y el formato (que consistirá en una numeración de los documentos.
  4. Recorremos el documento a grupos de 2 páginas y creamos un nuevo documento mediante el comando copyPagesTo(pág. desde, pág hasta)
  5. Al final cerramos todos los documentos implicados.
  6. Se podría modificar el programa para que se parametrizara el número de páginas por documento. 


 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
package u.requests;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;



public class SplitPDF {

 public static final String DEST = "/home/ximo/PDF/DESTINO/splitDocument1_%s.pdf";
  
 public static final String RESOURCE = "/home/ximo/PDF/documentoGordo.pdf";
  
 public static void main(String[] args) throws IOException {
     File file = new File(DEST);
     file.getParentFile().mkdirs();
  
     manipulatePdf(RESOURCE, DEST); 
 }
         
 /**
 * Divide el origen en varios documentos de 2 hojas
 * @param origin
 * @param dest
 * @throws IOException
 */
     
 protected static void manipulatePdf(final String origin, final String dest) throws IOException {
     //1. documento original
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(origin));
         
    //2. lista de documentos
     List<PdfDocument>lDocs=new ArrayList<>();
      
    //3. Creamos los documentos de 2 páginass
     int i=1;
     int nPages=pdfDoc.getNumberOfPages();
     while (i<nPages) {
        //Creamos el documento numerado
         PdfDocument toDocument = new PdfDocument(new PdfWriter(new File(String.format(dest, (i+1)/2))));
         pdfDoc.copyPagesTo(i, i+1, toDocument);
         lDocs.add(toDocument);
         i=i+2;
     }
     //4. Cerramos los documentos creados
     for (PdfDocument doc : lDocs) doc.close();
   
     //5. Cerramos el documento original
     pdfDoc.close();
    }
}

Happy coding!

No hay comentarios :

Publicar un comentario