Saltar al contenido

¿Cómo fusionar dos archivos PDF en uno en Java?

Jimena, miembro de nuestro equipo, nos ha hecho el favor de redactar este enunciado ya que domina perfectamente dicho tema.

Solución:

¿Por qué no usar PDFMergerUtility de pdfbox?

PDFMergerUtility ut = new PDFMergerUtility();
ut.addSource(...);
ut.addSource(...);
ut.addSource(...);
ut.setDestinationFileName(...);
ut.mergeDocuments();

Una búsqueda rápida en Google devolvió este error: “Descriptor de archivo incorrecto al guardar un documento con archivos PDF importados”.

Parece que debe mantener abiertos los archivos PDF que se fusionarán hasta que haya guardado y cerrado el PDF combinado.

Este es un código listo para usar, fusionando cuatro archivos pdf con itext.jar de http://central.maven.org/maven2/com/itextpdf/itextpdf/5.5.0/itextpdf-5.5.0.jar, más en http ://tutorialspointexamples.com/

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * This class is used to merge two or more 
 * existing pdf file using iText jar.
 */
public class PDFMerger 

static void mergePdfFiles(List inputPdfList,
        OutputStream outputStream) throws Exception
    //Create document and pdfReader objects.
    Document document = new Document();
    List readers = 
            new ArrayList();
    int totalPages = 0;

    //Create pdf Iterator object using inputPdfList.
    Iterator pdfIterator = 
            inputPdfList.iterator();

    // Create reader list for the input pdf files.
    while (pdfIterator.hasNext()) 
            InputStream pdf = pdfIterator.next();
            PdfReader pdfReader = new PdfReader(pdf);
            readers.add(pdfReader);
            totalPages = totalPages + pdfReader.getNumberOfPages();
    

    // Create writer for the outputStream
    PdfWriter writer = PdfWriter.getInstance(document, outputStream);

    //Open document.
    document.open();

    //Contain the pdf data.
    PdfContentByte pageContentByte = writer.getDirectContent();

    PdfImportedPage pdfImportedPage;
    int currentPdfReaderPage = 1;
    Iterator iteratorPDFReader = readers.iterator();

    // Iterate and process the reader list.
    while (iteratorPDFReader.hasNext()) 
            PdfReader pdfReader = iteratorPDFReader.next();
            //Create page and add content.
            while (currentPdfReaderPage <= pdfReader.getNumberOfPages()) 
                  document.newPage();
                  pdfImportedPage = writer.getImportedPage(
                          pdfReader,currentPdfReaderPage);
                  pageContentByte.addTemplate(pdfImportedPage, 0, 0);
                  currentPdfReaderPage++;
            
            currentPdfReaderPage = 1;
    

    //Close document and outputStream.
    outputStream.flush();
    document.close();
    outputStream.close();

    System.out.println("Pdf files merged successfully.");


public static void main(String args[])
    try 
        //Prepare input pdf file list as list of input stream.
        List inputPdfList = new ArrayList();
        inputPdfList.add(new FileInputStream("..\pdf\pdf_1.pdf"));
        inputPdfList.add(new FileInputStream("..\pdf\pdf_2.pdf"));
        inputPdfList.add(new FileInputStream("..\pdf\pdf_3.pdf"));
        inputPdfList.add(new FileInputStream("..\pdf\pdf_4.pdf"));


        //Prepare output stream for merged pdf file.
        OutputStream outputStream = 
                new FileOutputStream("..\pdf\MergeFile_1234.pdf");

        //call method to merge pdf files.
        mergePdfFiles(inputPdfList, outputStream);     
     catch (Exception e) 
        e.printStackTrace();
    
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *