0. Introducción
Una aplicación externa nos genera un solo PDF con información relativa a varios trabajadores, con las siguientes particularidades:
- El documento específico de cada trabajador ocupa 2 páginas.
- La estructura del documento es la misma, solo cambian los datos específicos para cada trabajador.
- 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
- Utilizaremos la librería Java IText 7 Community.
- Partimos de la localización inicial del documento en la constante RESOURCE.
- Le indicamos la ruta donde guardar los ficheros generados y el formato (que consistirá en una numeración de los documentos.
- Recorremos el documento a grupos de 2 páginas y creamos un nuevo documento mediante el comando copyPagesTo(pág. desde, pág hasta)
- Al final cerramos todos los documentos implicados.
- 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