En el caso que tengamos la necesidad crear un solo archivo PDF compuesto de 2 o más PDFs independientes podemos utilizar la herramienta iTextSharp.

Por ejemplo, supongamos que tenemos un sistema y queremos exportar lo que el usuario tiene en pantalla. Pero además de exportar la información que el usuario necesita, también queremos añadirle una portada al documento para darle un toque elegante al documento que el usuario está por descargar.

Cómo unir archivos PDF

Con iTextSharp es relativamente sencillo poder lograr esta unión de archivos PDF. La manera de hacerlo es la siguiente:

  1. Necesitamos leer el primer archivo que queremos utilizar. Si seguimos el ejemplo anterior esta sería la portada del documento final.
    // Abrimos el primer documento existente
    PdfReader reader = new PdfReader("portada.pdf");
    
  2. Creamos un nuevo documento PDF y añadimos la portada.
    // Creamos el nuevo PDF
    MemoryStream m = new MemoryStream();
    Document pdf = new Document(PageSize.LETTER);
    PdfWriter writer = PdfWriter.GetInstance(pdf, m);// Instrucción para que el PDF imprima correctamente según el tamaño de papel seleccionado.
    writer.AddViewerPreference(PdfName.PICKTRAYBYPDFSIZE, PdfBoolean.PDFTRUE);// Añadimos los atributos del nuevo PDF
    pdf.AddAuthor("Autor");
    pdf.AddTitle("Titulo del nuevo PDF");
    pdf.AddCreator("Creador del documento");
    pdf.AddCreationDate();
    
    // Abrimos el documento
    pdf.Open();
    writer.PageEvent = new PdfFooter();
    
    PdfContentByte cb = writer.DirectContent;
    
    // Aquí declaramos el tipo de letra, tamaño y color que deseamos utilizar
    BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
    cb.SetColorFill(BaseColor.BLACK);
    cb.SetFontAndSize(bf, 12);
    
    // Creamos una nueva página e importamos el contenido del paso #1: portada.pdf
    PdfImportedPage page = writer.GetImportedPage(reader, 1);
    cb.AddTemplate(page, 0, 0);
    
  3. Añadimos contenido dinámico, como normalmente hacemos, o continuamos añadiendo archivos PDF ya creados. En el caso que no tengas muchas experiencia con iTextSharp, puedes ver la publicación: Creando archivos PDF con iTextSharp.
  4. Cerramos el documento y lo guardamos.
    // Cerramos el nuevo archivo PDF
    pdf.Close();
    writer.Close();// En el caso que querramos guardarlo en una carpeta
    byte[] bytArr = m.ToArray();
    using (FileStream fs = File.Create("carpetaYNombreDelNuevoPDF.pdf"))
    {
    fs.Write(bytArr, 0, (int)bytArr.Length);
    }// En el caso que estemos usando ASP.Net y querramos que el usuario lo pueda descargar
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.ContentType = "application/pdf";
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + "carpetaYNombreDelNuevoPDF.pdf");
    HttpContext.Current.Response.BinaryWrite(m.GetBuffer());
    HttpContext.Current.Response.End();
    

Y de esta manera podemos unir todos los archivos que necesitemos, más añadir contenido dinámico a nuestros archivos PDF.

Espero que les haya servido esta publicación. Cualquier duda o pregunta me la pueden dejar en el área de los comentarios.

¡Hasta la próxima!

Publicaciones relacionadas: