Comparar documentos PDF

Tenga en cuenta que todas las herramientas de comparación están disponibles en la biblioteca Aspose.PDF.Drawing.

Formas de comparar documentos PDF

Al trabajar con documentos PDF, hay momentos en los que necesitas comparar el contenido de dos documentos para identificar diferencias. La biblioteca Aspose.PDF for .NET proporciona un conjunto de herramientas poderoso para este propósito. En este artículo, exploraremos cómo comparar documentos PDF utilizando un par de fragmentos de código simples.

La funcionalidad de comparación en Aspose.PDF te permite comparar dos documentos PDF página por página. Puedes elegir comparar ya sea páginas específicas o documentos completos. El documento de comparación resultante resalta las diferencias, facilitando la identificación de cambios entre los dos archivos.

Aquí hay una lista de posibles formas de comparar documentos PDF utilizando la biblioteca Aspose.PDF for .NET:

  1. Comparar Páginas Específicas - Comparar las primeras páginas de dos documentos PDF.

  2. Comparar Documentos Completos - Comparar todo el contenido de dos documentos PDF.

  3. Comparar documentos PDF gráficamente:

  • Comparar PDF con el método GetDifference - imágenes individuales donde se marcan los cambios.

  • Comparar PDF con el método CompareDocumentsToPdf - documento PDF con imágenes donde se marcan los cambios.

Comparando Páginas Específicas

El primer fragmento de código demuestra cómo comparar las primeras páginas de dos documentos PDF.

  1. Inicialización del Documento. El código comienza inicializando dos documentos PDF utilizando sus respectivas rutas de archivo (documentPath1 y documentPath2). Las rutas se especifican como cadenas vacías por ahora, pero en la práctica, reemplazarías estas con las rutas de archivo reales.

  2. Proceso de Comparación.

  • Selección de Página - la comparación se limita a la primera página de cada documento (‘Pages[1]’).
  • Opciones de Comparación:

‘AdditionalChangeMarks = true’ - esta opción asegura que se muestren marcadores de cambios adicionales. Estos marcadores resaltan diferencias que podrían estar presentes en otras páginas, incluso si no están en la página actual que se está comparando.

‘ComparisonMode = ComparisonMode.IgnoreSpaces’ - este modo le dice al comparador que ignore los espacios en el texto, enfocándose solo en los cambios dentro de las palabras.

  1. El documento de comparación resultante, que resalta las diferencias entre las dos páginas, se guarda en la ruta de archivo especificada en ‘resultPdfPath’.
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingSpecificPages()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparingSpecificPages1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparingSpecificPages2.pdf"))
        {
            // Compare
            Aspose.Pdf.Comparison.SideBySidePdfComparer.Compare(document1.Pages[1], document2.Pages[1], dataDir + "ComparingSpecificPages_out.pdf", new Aspose.Pdf.Comparison.SideBySideComparisonOptions
            {
                AdditionalChangeMarks = true,
                ComparisonMode = Aspose.Pdf.Comparison.ComparisonMode.IgnoreSpaces,
                DeleteColor = Color.DarkGray,
                InsertColor = Color.LightYellow
            });
        }
    }
}

Comparando Documentos Completos

El segundo fragmento de código amplía el alcance para comparar todo el contenido de dos documentos PDF.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparingEntireDocuments()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparingEntireDocuments1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparingEntireDocuments2.pdf"))
        {
            // Compare
            Aspose.Pdf.Comparison.SideBySidePdfComparer.Compare(
                document1,
                document2,
                dataDir + "ComparingEntireDocuments_out.pdf",
                new Aspose.Pdf.Comparison.SideBySideComparisonOptions
                {
                    AdditionalChangeMarks = true,
                    ComparisonMode = Aspose.Pdf.Comparison.ComparisonMode.IgnoreSpaces,
                    DeleteColor = Color.DarkGray,
                    InsertColor = Color.LightYellow
                });
        }
    }
}

Los resultados de comparación generados por estos fragmentos son documentos PDF que puedes abrir en un visor como Adobe Acrobat. Si utilizas la vista de dos páginas en Adobe Acrobat, verás los cambios lado a lado:

  • Eliminaciones - estas se anotan en la página izquierda.
  • Inserciones - estas se anotan en la página derecha.

Al establecer ‘AdditionalChangeMarks’ en ’true’, también puedes ver marcadores para cambios que pueden ocurrir en otras páginas, incluso si esos cambios no están en la página actual que se está viendo.

Aspose.PDF for .NET proporciona herramientas robustas para comparar documentos PDF, ya sea que necesites comparar páginas específicas o documentos completos. Al utilizar opciones como ‘AdditionalChangeMarks’ y diferentes configuraciones de ‘ComparisonMode’, puedes adaptar el proceso de comparación a tus necesidades específicas. El documento resultante proporciona una vista clara, lado a lado de los cambios, facilitando el seguimiento de revisiones y asegurando la precisión del documento.

Comparar documentos PDF utilizando GraphicalPdfComparer

Al colaborar en documentos, especialmente en entornos profesionales, a menudo terminas con múltiples versiones del mismo archivo.

Puedes usar la clase GraphicalPdfComparer para comparar documentos y páginas PDF. La clase es adecuada para comparar cambios en el contenido gráfico de una página.

Con Aspose.PDF for .NET, es posible comparar documentos y páginas y exportar el resultado de la comparación a un documento PDF o archivo de imagen.

Puedes establecer las siguientes propiedades de la clase:

  • Resolución - resolución en unidades DPI para imágenes de salida, así como para imágenes generadas durante la comparación.
  • Color - el color de los marcadores de cambios.
  • Umbral - umbral de cambio en porcentaje. El valor predeterminado es cero. Establecer un valor diferente de cero te permite ignorar cambios gráficos que son insignificantes para ti.

La clase tiene un método que te permite obtener diferencias de imagen de página en una forma adecuada para un procesamiento posterior: ImagesDifference GetDifference(Page page1, Page page2).

Este método devuelve un objeto de la clase ImagesDifference, que contiene una imagen de la primera página que se está comparando y un array de diferencias. El array de diferencias y la imagen original tienen el formato de píxel RGB24bpp.

ImagesDifference te permite generar una imagen diferente y obtener una imagen de la segunda página que se está comparando al agregar un array de diferencias a la imagen original. Para hacer esto, utiliza los métodos ImagesDifference.GetDestinationImage y ImagesDifference.DifferenceToImage.

Comparar PDF con el método GetDifference

El código proporcionado define un método GetDifference que compara dos documentos PDF y genera representaciones visuales de las diferencias entre ellos.

Este método compara las primeras páginas de dos archivos PDF y genera dos imágenes PNG:

  • Una imagen (diffPngFilePath) resalta las diferencias entre las páginas en rojo.
  • La otra imagen (destPngFilePath) es una representación visual de la página PDF de destino (segunda).

Este proceso puede ser útil para comparar visualmente cambios o diferencias entre dos versiones de un documento.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparePDFWithGetDifferenceMethod()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithGetDifferenceMethod1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithGetDifferenceMethod2.pdf"))
        {
            // Create comparer 
            var comparer = new Aspose.Pdf.Comparison.GraphicalPdfComparer();
            // Compare
            using (var imagesDifference = comparer.GetDifference(document1.Pages[1], document2.Pages[1]))
            {
                using (var diffImg = imagesDifference.DifferenceToImage(Aspose.Pdf.Color.Red, Aspose.Pdf.Color.White))
                {
                    diffImg.Save(dataDir + "ComparePDFWithGetDifferenceMethodDiffPngFilePath_out.png");
                }
                using (var destImg = imagesDifference.GetDestinationImage())
                {
                    destImg.Save(dataDir + "ComparePDFWithGetDifferenceMethodDestPngFilePath_out.png");
                }
            }
        }
    }
}

Comparar PDF con el método CompareDocumentsToPdf

El fragmento de código proporcionado utiliza el método CompareDocumentsToPdf que compara dos documentos y genera un informe PDF de los resultados de la comparación.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ComparePDFWithCompareDocumentsToPdfMethod()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_DocumentCompare();

    // Open PDF documents
    using (var document1 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithCompareDocumentsToPdfMethod1.pdf"))
    {
        using (var document2 = new Aspose.Pdf.Document(dataDir + "ComparePDFWithCompareDocumentsToPdfMethod2.pdf"))
        {
            // Create comparer
            var comparer = new Aspose.Pdf.Comparison.GraphicalPdfComparer()
            {
                Threshold = 3.0,
                Color = Aspose.Pdf.Color.Blue,
                Resolution = new Aspose.Pdf.Devices.Resolution(300)
            };
            // Compare
            comparer.CompareDocumentsToPdf(document1, document2, dataDir + "compareDocumentsToPdf_out.pdf");
        }
    }
}

Método Universal para Comparación de Documentos

Puedes usar la clase TextPdfComparer para comparar documentos y páginas individuales. La clase permite comparar documentos página por página o como un único flujo de contenido continuo (sin separación de páginas). Los métodos de comparación devuelven un array de diferencias que se pueden pasar a cualquier clase que implemente las interfaces IStringOutputGenerator o IFileOutputGenerator para producir una salida de comparación formateada. La salida es compatible en: HTML, Markdown, PDF, y JSON. También puedes usar la clase ComparisonStatistics para obtener estadísticas sobre las operaciones de comparación realizadas.

Método Descripción Parámetros Valor de Retorno
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options) Compara dos documentos PDF página por página. * document1 – el primer documento.
* document2 – el segundo documento.
* options – opciones de comparación (ver abajo).
List<List<DiffOperation>> – lista de diferencias para cada página.
CompareDocumentsPageByPage(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) Igual que arriba, pero también guarda los resultados de la comparación en un archivo PDF. Mismos parámetros que arriba + resultPdfDocumentPath – ruta al archivo de salida. List<List<DiffOperation>> – lista de diferencias.
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options) Compara dos documentos PDF como un único texto continuo (fusionando todas las páginas). Mismos parámetros que en CompareDocumentsPageByPage. List<DiffOperation> – lista de todas las diferencias.
CompareFlatDocuments(Document document1, Document document2, ComparisonOptions options, string resultPdfDocumentPath) Comparación de documentos planos con resultado guardado en un archivo PDF. Mismos parámetros que en CompareFlatDocuments + resultPdfDocumentPath. List<DiffOperation> – lista de diferencias.
ComparePages(Page page1, Page page2, ComparisonOptions options) Compara dos páginas individuales. * page1 – la primera página.
* page2 – la segunda página.
* options – opciones de comparación.
List<DiffOperation> – lista de diferencias de página.
CreateComparisonStatistics(List<DiffOperation> diffs) Genera estadísticas de comparación para una lista de operaciones (página única). diffs – lista de DiffOperation. TextItemComparisonStatistics (ver abajo).
CreateComparisonStatistics(List<List<DiffOperation>> diffs) Genera estadísticas de comparación para una lista de operaciones a través de páginas (nivel de documento). diffs – lista de listas de DiffOperation. DocumentComparisonStatistics (ver abajo).
AssemblySourcePageText(List<DiffOperation> diffs) Reconstruye el texto original (pre-cambio) de la página. diffs – lista de operaciones. string – texto original.
AssemblyDestinationPageText(List<DiffOperation> diffs) Reconstruye el texto modificado (post-cambio) de la página. diffs – lista de operaciones. string – texto modificado.

Clases Públicas Relacionadas

ComparisonOptions

Parámetros que afectan el proceso de comparación:

Propiedad Tipo Descripción
ExtractionArea Rectangle El área de la que se extraerá el texto. No compatible con ExcludeTables, ExcludeAreas1/2.
ExcludeTables bool Excluir tablas de la comparación. No compatible con ExtractionArea.
ExcludeAreas1 Rectangle[] Array de áreas a excluir para el primer documento.
ExcludeAreas2 Rectangle[] Array de áreas a excluir para el segundo documento.
EditOperationsOrder EditOperationsOrder (enum) Orden de aplicación de operaciones de inserción/eliminación (el valor predeterminado es DeleteFirst).

DiffOperation

Representa una única operación de diferencia. Contiene:

Propiedad Tipo Descripción
Operation Operation (enum) Tipo de operación (Equal, Delete, Insert).
Text string Texto asociado con la operación.

ComparisonStatistics

Clase Descripción
TextItemComparisonStatistics Estadísticas para un texto individual (página). Incluye caracteres totales, número de inserciones, eliminaciones y operaciones correspondientes.
DocumentComparisonStatistics (hereda de TextItemComparisonStatistics) Estadísticas extendidas para todo el documento, incluyendo una lista de PagesStatistics (estadísticas por página).

Ejemplo de Uso