Mezclar archivos PDF con C# e iTextSharp
Mezclar archivos PDF con C# e iTextSharp
October 11, 2019
La librería iTextSharp, es una traducción en C# del código de iText en Java para el tratamiento de archivos PDF.
Aparte de permitirnos crear archivos PDF dinámicos, tiene funciones para firmar PDF o combinar archivos.
Si lo que deseamos es combinar una serie de archivos PDF en primer lugar debemos incluir los espacios de nombres de la librería:
using iTextSharp.text;
using iTextSharp.text.pdf;
Y posteriormente ir leyendo uno a uno los archivos que deseemos combinar y grabando las páginas en otro archivo.
La siguiente función realiza la combinación de los archivos. Espera dos parámetros, el primero de ellos es el nombre del archivo final, el segundo es un array con los nombres de los archivos que deseamos combinar:
/// <summary>
/// Combina una serie de archivos PDF
/// </summary>
internal static bool Merge(string strFileTarget, string [] arrStrFilesSource)
{
bool blnMerged = false;
// Crea el PDF de salida
try
{
using (System.IO.FileStream stmFile = new System.IO.FileStream(strFileTarget, System.IO.FileMode.Create))
{
Document objDocument = null;
PdfWriter objWriter = null;
// Recorre los archivos
for (int intIndexFile = 0; intIndexFile < arrStrFilesSource.Length; intIndexFile++)
{
PdfReader objReader = new PdfReader(arrStrFilesSource[intIndexFile]);
int intNumberOfPages = objReader.NumberOfPages;
// La primera vez, inicializa el documento y el escritor
if (intIndexFile == 0)
{
// Asigna el documento y el generador
objDocument = new Document(objReader.GetPageSizeWithRotation(1));
objWriter = PdfWriter.GetInstance(objDocument, stmFile);
// Abre el documento
objDocument.Open();
}
// Añade las páginas
for (int intPage = 0; intPage < intNumberOfPages; intPage++)
{
int intRotation = objReader.GetPageRotation(intPage + 1);
PdfImportedPage objPage = objWriter.GetImportedPage(objReader, intPage + 1);
// Asigna el tamaño de la página
objDocument.SetPageSize(objReader.GetPageSizeWithRotation(intPage + 1));
// Crea una nueva página
objDocument.NewPage();
// Añade la página leída
if (intRotation == 90 || intRotation == 270)
objWriter.DirectContent.AddTemplate(objPage, 0, -1f, 1f, 0, 0,
objReader.GetPageSizeWithRotation(intPage + 1).Height);
else
objWriter.DirectContent.AddTemplate(objPage, 1f, 0, 0, 1f, 0, 0);
}
}
// Cierra el documento
if (objDocument != null)
objDocument.Close();
// Cierra el stream del archivo
stmFile.Close();
}
// Indica que se ha creado el documento
blnMerged = true;
}
catch(Exception objException)
{
System.Diagnostics.Debug.WriteLine(objException.Message);
}
// Devuelve el valor que indica si se han mezclado los archivos
return blnMerged;
}