iTextSharp: unir ficheros PDF con VB.NET

El siguiente código, me ha sido muy útil para unir varios informes PDF en un sólo fichero. Por ejemplo: tenemos una portada genérica, con un informe generado por nosotros y una hoja de observaciones, también genérica. Y los queremos unir en un sólo PDF para enviárselo al cliente a modo de propuesta.

El siguiente ejemplo lo implanté en .NET ya que estaba integrado en una aplicación creada sobre esta plataforma. En realidad no tiene una gran dificultad, pero quizás os ayude a entender cómo funciona la librería opensource iTextSharp. Como mínimo valdrá como introducción.

Las funcionalidades de esta librerían van más allá: nos permiten crear y editar PDF en base a datos xml u otras fuentes de datos, rellenar formularios de PDF (de modo que podríamos generarnos una plantilla y rellenarla de forma dinámica para que fuera presentada), firma digital y muchas más que podéis descubrir leyendo la documentación de la librería. Aunque si queréis sacarle todo el partido, existe un libro estupendo en Amazon de la editorial O’Reilly.

  <font size=-4>    Sub UnirPDFs(ByVal sFolderPath As String, ByVal sFileList As String())
        Dim bOutputfileAlreadyExists As Boolean = False
        Dim oFolderInfo As New System.IO.DirectoryInfo(sFolderPath)
        Dim sOutFilePath As String = sFolderPath
        ' Vamos a comprobar que el fichero final no exista ya, para generar un warning
        If System.IO.File.Exists(sOutFilePath) Then
            Try
                MessageBox.Show("Ya existe el archivo")
            Catch ex As Exception
                ' aquí pon el código para tratar la excepción o eliminar el fichero..o lo que quieras
                bOutputfileAlreadyExists = True
            End Try
        End If
        Dim iPageCount As Integer = GetPageCountList(sFileList)
        ' Si el fichero de salida no existe y los de entrada tienen más de 0 pag. adelante
        If iPageCount &gt; 0 And bOutputfileAlreadyExists = False Then
            ' Instanciamos las clases de oPDF a partir de los FileStream de ficheros de entrada
            Dim oPdfDoc As New iTextSharp.text.Document()
            Dim oPdfWriter As PdfWriter = PdfWriter.GetInstance(oPdfDoc, New FileStream(sOutFilePath, FileMode.Create))
            oPdfDoc.Open()
            For i As Integer = 0 To sFileList.Length - 1
                Dim sFromFilePath As String = sFileList(i)
                Dim oFileInfo As New FileInfo(sFromFilePath)
                Dim sExt As String = UCase(oFileInfo.Extension).Substring(1, 3)

                Try
                    If sExt = "PDF" Then
                        PdfReader.unethicalreading = True
                        ' Añadimos PDF al fichero final
                        AddPdf(sFromFilePath, oPdfDoc, oPdfWriter)
                    End If
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
            Next
            Try
                oPdfDoc.Close()
                oPdfWriter.Close()
            Catch ex As Exception
                Try
                    System.IO.File.Delete(sOutFilePath)
                Catch ex2 As Exception
                End Try
            End Try
        End If
        MessageBox.Show("Ficheros unidos con éxito")
    End Sub
&lt;/font>