Introducción

PDF es el estándar de facto para contratos, especificaciones, informes y presentaciones regulatorias — y con múltiples versiones en circulación, rastrear exactamente qué cambió entre dos archivos rápidamente se vuelve tedioso. Desplazarse por los documentos lado a lado y anotar las diferencias a mano no escala, e incluso herramientas diseñadas específicamente como la función Compare de Adobe Acrobat requieren intervención manual para cada par de archivos.

GroupDocs.Comparison for .NET te permite ejecutar la comparación de PDF completamente desde código y elegir exactamente cómo se presenta el resultado. La versión 26.4 introdujo una clase dedicada PdfCompareOptions con tres modos de visualización de salida:

  1. En línea (predeterminado) — un único PDF fusionado donde las eliminaciones y inserciones se resaltan en colores diferentes en las mismas páginas. Este es el comportamiento clásico y es el resultado más fácil de compartir como un archivo independiente.
  2. Lado a lado — cada página de resultado muestra las páginas origen y destino colocadas una al lado de la otra, sin superposición de contenido. Ideal cuando los documentos difieren mucho y mezclar contenido en una sola página sería confuso.
  3. Intercalado — el resultado contiene páginas alternas: las páginas impares provienen del origen (eliminaciones resaltadas), las pares del destino (inserciones resaltadas). Los cambios se representan como anotaciones PDF nativas — un tipo de objeto PDF incorporado que lleva metadatos como el tipo de cambio y el nombre del autor. La mayoría de los visores PDF (Adobe Acrobat Reader, Foxit, etc.) permiten abrir el panel de anotaciones y aceptar o eliminar anotaciones individuales, creando un flujo de revisión ligero sin software adicional. Abrir este archivo en un lector PDF con Vista de dos páginas produce una comparación natural izquierda/derecha.

En este artículo recorreremos los tres modos con ejemplos funcionales en C#, exploraremos PdfCompareOptions y sus propiedades, y cubriremos brevemente cómo realizar la misma tarea manualmente en Adobe Acrobat.


Comparar PDFs en Adobe Acrobat

Antes de sumergirnos en el enfoque programático, vale la pena conocer lo que Adobe Acrobat Pro ofrece de serie. La herramienta integrada Compare Files (disponible en Tools → Compare Files) produce un informe lado a lado que resalta cambios de texto, diferencias de imágenes y variaciones de formato.

Para ejecutar una comparación en Acrobat Pro:

  1. Abre Acrobat Pro y elige Tools → Compare Files.
  2. Selecciona el Older File (origen) y el Newer File (destino).
  3. Haz clic en Compare. Acrobat genera un informe interactivo de comparación con una página de resumen y marcadores de cambio en línea.

Esto funciona bien para revisiones manuales ocasionales. Sin embargo, la herramienta de comparación de Acrobat tiene limitaciones significativas cuando la comparación debe formar parte de una canalización automatizada.

Cuando la comparación debe ocurrir en un servidor, dentro de una canalización CI/CD, o como parte de un flujo de revisión personalizado, una biblioteca orientada al código es la herramienta adecuada.


Requisitos previos

Antes de comenzar:

  • .NET 6.0 o posterior.
  • GroupDocs.Comparison for .NET 26.4 o posterior — instala vía NuGet:
dotnet add package GroupDocs.Comparison
  • Un archivo de licencia (GroupDocs.Comparison.lic). Sin él la biblioteca se ejecuta en modo de evaluación con marcas de agua y límites de número de páginas. Puedes solicitar una licencia temporal para pruebas.
  • Dos archivos PDF para comparar — los llamaremos source.pdf y target.pdf. Contenido de ejemplo:
source.pdf target.pdf

Modo 1: Comparación en línea (Predeterminada)

Cuándo usarlo: deseas un único archivo PDF autocontenido que cualquiera pueda abrir y ver inmediatamente qué cambió — sin necesidad de un visor especial o un diseño de dos páginas. Un escenario típico es compartir un borrador de contrato tachado con la contraparte.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Inline
    };

    comparer.Compare("result_inline.pdf", options);
}

Nota: Inline es el valor predeterminado de DisplayMode, por lo que el bloque options anterior es opcional. Una llamada simple comparer.Compare("result_inline.pdf") produce el mismo resultado.

Documento resultante en modo En línea:

PDF comparison result in Inline mode

Qué ocurre bajo el capó:

  • El contenido eliminado del documento origen se resalta en un color (rojo por defecto).
  • El contenido insertado del documento destino se resalta en otro color (verde por defecto).
  • Ambos conjuntos de cambios coexisten en las mismas páginas, por lo que el resultado es compacto pero puede verse saturado cuando los documentos difieren mucho. Con ediciones de texto sustanciales, el contenido eliminado e insertado puede superponerse físicamente en la página — por ejemplo, un párrafo reemplazado se dibuja sobre el original, produciendo un enredo ilegible. En esos casos el modo SideBySide o Interleaved es una mejor opción.

Modo 2: Comparación lado a lado

Cuándo usarlo: los dos documentos difieren mucho y colocar eliminaciones e inserciones en la misma página haría que el resultado sea difícil de leer. Lado a lado mantiene el contenido origen y destino estrictamente separado, facilitando la revisión rápida de cada página.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_side_by_side.pdf", options);
}

Documento resultante en modo Lado a lado:

PDF comparison result in Side-by-Side mode

Qué ocurre bajo el capó:

  • Cada página de resultado es esencialmente un lienzo amplio dividido en dos mitades.
  • La mitad izquierda muestra la página origen correspondiente con eliminaciones resaltadas.
  • La mitad derecha muestra la página destino con inserciones resaltadas.
  • El contenido de los dos documentos nunca se superpone, por lo que incluso páginas con muchas ediciones siguen siendo legibles.

Modo 3: Comparación intercalada

Cuándo usarlo: deseas revisar los cambios página por página en un lector PDF estándar usando su modo Two Page View (o “Facing Pages”). Cada página origen queda a la izquierda, su página destino correspondiente a la derecha — el diseño físico refleja lo que SideBySide muestra en un solo lienzo, pero cada página se mantiene a tamaño completo.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
        AnnotationAuthorName = "GroupDocs"
    };

    comparer.Compare("result_interleaved.pdf", options);
}

Documento resultante en modo Intercalado (mostrado en Vista de dos páginas):

PDF comparison result in Interleaved mode viewed in Two Page View

Qué ocurre bajo el capó:

  • El documento resultante contiene 2 × N páginas para un par de documentos origen/destino de N páginas.
  • Las páginas impares (1, 3, 5 …) son páginas origen con eliminaciones resaltadas.
  • Las páginas pares (2, 4, 6 …) son páginas destino con inserciones resaltadas.
  • AnnotationAuthorName estampa el nombre del autor en las anotaciones PDF generadas durante la comparación — útil cuando el resultado alimenta un flujo de revisión donde deben distinguirse los comentarios de varios autores.

Consejo: abre el resultado en Adobe Acrobat Reader o cualquier visor que admita View → Page Display → Two Page View para obtener automáticamente el diseño izquierdo/derecho previsto.


Limitar la comparación a un rango de páginas

Los tres modos admiten filtrado por rango de páginas mediante la propiedad PagesSetup. Esto es útil cuando solo un capítulo o sección específica de un documento grande ha cambiado y deseas omitir el resto.

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide,
        PagesSetup = new PagesSetup
        {
            StartPage = 3,
            EndPage = 10
        }
    };

    comparer.Compare("result_pages_3_to_10.pdf", options);
}

Cuando PagesSetup es null (o no se establece), se comparan todas las páginas — el mismo comportamiento que en versiones anteriores.


Explorando PdfCompareOptions

PdfCompareOptions es una subclase específica de PDF de CompareOptions, siguiendo el mismo patrón que WordCompareOptions introducido en la versión 26.2. Agrupa todas las configuraciones exclusivas de PDF en un solo lugar para que no apliques accidentalmente opciones propias de Word o de hojas de cálculo a un trabajo PDF.

Propiedad Tipo Descripción
DisplayMode ComparisonDisplayMode Controla el diseño del resultado: Inline (predeterminado), SideBySide o Interleaved.
PagesSetup PagesSetup Rango de páginas a comparar. Cuando es null, se procesan todas las páginas.
CompareImagesPdf bool Indica si se deben incluir imágenes incrustadas en la comparación.
AnnotationAuthorName string Nombre del autor estampado en las anotaciones PDF (usado en modo Interleaved).
ImagesInheritanceMode enum Controla qué documento proporciona las imágenes cuando la comparación de imágenes está deshabilitada.

Ejemplo con todas las opciones configuradas:

var options = new PdfCompareOptions
{
    DisplayMode = PdfCompareOptions.ComparisonDisplayMode.Interleaved,
    CompareImagesPdf = true,
    AnnotationAuthorName = "Review Bot",
    PagesSetup = new PagesSetup { StartPage = 1, EndPage = 5 }
};

Las propiedades heredadas de CompareOptionsInsertedItemStyle, DeletedItemStyle, ChangedItemStyle — también están disponibles, permitiendo sobrescribir los colores de resaltado predeterminados cuando sea necesario.


Obtener cambios programáticamente

Independientemente del modo de visualización, puedes obtener una lista estructurada de todas las diferencias detectadas mediante Comparer.GetChanges(). Esto es útil para crear informes personalizados, alimentar resultados a un sistema de revisión o recopilar estadísticas sobre el alcance de las ediciones.

using (var comparer = new Comparer("source.pdf"))
{
    comparer.Add("target.pdf");

    comparer.Compare("result.pdf");

    var changes = comparer.GetChanges(); // devuelve ChangeInfo[]
    Console.WriteLine($"Total changes detected: {changes.Length}");
}

Consulta la referencia oficial de la API para más detalles: Comparer.GetChanges.


Trabajar con PDFs protegidos con contraseña

Los PDFs protegidos con contraseña son totalmente compatibles. Pasa la contraseña mediante LoadOptions al crear el Comparer:

using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;

using (var comparer = new Comparer("source_protected.pdf",
    new LoadOptions { Password = "secret" }))
{
    comparer.Add("target_protected.pdf", new LoadOptions { Password = "secret" });

    var options = new PdfCompareOptions
    {
        DisplayMode = PdfCompareOptions.ComparisonDisplayMode.SideBySide
    };

    comparer.Compare("result_protected.pdf", options);
}

Obtén una prueba gratuita

Puedes descargar GroupDocs.Comparison for .NET desde la página oficial de releases. Para pruebas sin restricciones, solicita una licencia temporal — no se requiere tarjeta de crédito.


Preguntas frecuentes

P: ¿Necesito Adobe Acrobat u otro software PDF instalado en el servidor?
R: No. GroupDocs.Comparison es una biblioteca .NET independiente que lee y escribe archivos PDF sin dependencias de terceros.

P: ¿Qué modo de visualización debería usar por defecto?
R: Comienza con Inline — produce el resultado más compacto y es el más fácil de compartir. Cambia a SideBySide cuando las ediciones intensas hacen que la vista en línea sea difícil de leer, o usa Interleaved cuando los revisores abrirán el resultado en un lector PDF con Two Page View.

P: ¿Puedo comparar documentos en formatos distintos a PDF?
R: Sí — la biblioteca admite documentos Word, hojas de cálculo Excel, presentaciones PowerPoint, archivos de texto plano y muchos más. La lista completa está en la documentación.

P: ¿Qué ocurre si no configuro una licencia?
R: La biblioteca se ejecuta en modo de evaluación. Los documentos de salida contendrán una marca de agua y solo se procesarán las primeras páginas. Una licencia temporal elimina estas restricciones para pruebas.

P: ¿Puedo comparar solo imágenes dentro de un PDF e ignorar los cambios de texto?
R: Usa CompareImagesPdf = true en PdfCompareOptions para incluir la comparación de imágenes. Para enfocarte exclusivamente en imágenes puedes combinar esto con la propiedad ImagesInheritanceMode; consulta la referencia de la API para más detalles.


Conclusión

GroupDocs.Comparison for .NET 26.4 te brinda un control preciso y basado en código sobre cómo se presentan los resultados de la comparación de PDF. El modo Inline cubre el caso de uso más común — un único PDF tachado y compartible. SideBySide mantiene el contenido fuertemente editado limpio y legible. Interleaved se combina de forma natural con cualquier lector PDF en modo Two Page View para una revisión página por página a tamaño completo. Además, el filtrado por rango de páginas te permite focalizar exactamente las secciones que importan, y PdfCompareOptions consolida todas las configuraciones específicas de PDF en una clase fácil de descubrir.

Elige el modo que se ajuste a tu flujo de trabajo, o genera los tres y permite que cada audiencia seleccione su vista preferida.

Recursos adicionales