Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Tenga en cuenta que todas las herramientas de comparación están disponibles en la biblioteca Aspose.PDF.Drawing.
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:
Comparar Páginas Específicas - Comparar las primeras páginas de dos documentos PDF.
Comparar Documentos Completos - Comparar todo el contenido de dos documentos PDF.
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.
El primer fragmento de código demuestra cómo comparar las primeras páginas de dos documentos PDF.
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.
Proceso 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.
// 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
});
}
}
}
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 usas la vista de dos páginas en Adobe Acrobat, verás los cambios lado a lado:
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á visualizando.
Aspose.PDF for .NET proporciona herramientas robustas para comparar documentos PDF, ya sea que necesites comparar páginas específicas o documentos completos. Al usar 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.
| Clase | Propósito | Propiedades Clave | Cómo Usar |
|---|---|---|---|
SideBySideDocsComparisonResult |
Representa el resultado de una comparación lado a lado de dos documentos PDF. | * HasChanges – indica si se detectaron cambios.* FirstDocChanges – una lista de cambios agrupados por páginas de la primera versión del documento.* SecondDocChanges – una lista de cambios agrupados por páginas de la segunda versión del documento.* FullChanges – la secuencia completa de cambios, donde cada elemento corresponde a un par de páginas comparadas y contiene todas las operaciones de comparación para ese par de páginas. |
Devuelto por el método SideBySidePdfComparer.Compare(Document, Document, string, SideBySideComparisonOptions). Después de obtener la instancia, puedes determinar si existen cambios (HasChanges) e iterar a través de las colecciones para recuperar información detallada sobre qué páginas y fragmentos han cambiado. |
SideBySidePagesComparisonResult |
Representa el resultado de una comparación lado a lado de dos páginas PDF individuales. | * HasChanges – indica si existen diferencias entre las páginas.* FirstPageChanges – una lista de cambios detectados en la primera página.* SecondPageChanges – una lista de cambios detectados en la segunda página.* FullChanges – la secuencia completa de operaciones de comparación entre las dos páginas. |
Devuelto por el método SideBySidePdfComparer.Compare(Page, Page, string, SideBySideComparisonOptions). Después de obtener la instancia, puedes determinar si existen cambios (HasChanges) e iterar a través de las colecciones para recuperar la lista completa de diferencias. |
| Propiedad | Tipo | Descripción |
|---|---|---|
HasChanges |
bool |
Indica si existe al menos una diferencia. |
FirstDocChanges / FirstPageChanges |
List<List<EditContainer>> / List<EditContainer> |
Contiene cambios detectados en el primero (documento/página). Para documentos, esta es una lista de listas, donde cada lista anidada corresponde a una sola página. |
SecondDocChanges / SecondPageChanges |
List<List<EditContainer>> / List<EditContainer> |
Contiene cambios detectados en el segundo (documento/página). Para documentos, esta es una lista de listas, donde cada lista anidada corresponde a una sola página. |
FullChanges |
List<List<DiffOperation>> (documentos) List<DiffOperation> (páginas) |
Un conjunto consolidado de todas las operaciones de comparación. Para documentos, esta es una lista bidimensional donde cada elemento externo corresponde a un par de páginas comparadas. Para páginas, es una lista plana de operaciones. |
DiffOperation |
(tipo externo) | Describe un cambio específico (inserción, eliminación, igualdad). |
// 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();
// --- Comparing pages ----------------------------
// Open PDF documents
using (Document doc1 = new Document(dataDir + "ComparingEntireDocuments1.pdf"),
doc2 = new Document(dataDir + "ComparingEntireDocuments2.pdf"))
{
// Compare
SideBySidePagesComparisonResult pageResult = SideBySidePdfComparer.Compare(
doc1.Pages[1],
doc2.Pages[1],
dataDir + "ComparingEntireDocuments_out.pdf",
new SideBySideComparisonOptions
{
AdditionalChangeMarks = false,
ComparisonMode = ComparisonMode.Normal
});
Console.WriteLine("=== Page Comparison ===");
Console.WriteLine(pageResult.HasChanges ? "Changes were detected" : "No changes detected");
Console.WriteLine($"First page changes count : {pageResult.FirstPageChanges.Count}");
Console.WriteLine($"Second page changes count: {pageResult.SecondPageChanges.Count}");
Console.WriteLine($"Total changes count : {pageResult.FullChanges.Count}");
}
// --- Comparing documents ----------------------------
// Open PDF documents
using (Document doc1 = new Document(dataDir + "ComparingEntireDocuments1.pdf"),
doc2 = new Document(dataDir + "ComparingEntireDocuments2.pdf"))
{
// Compare
SideBySideDocsComparisonResult docResult = SideBySidePdfComparer.Compare(
doc1,
doc2,
dataDir + "ComparingEntireDocuments_out.pdf",
new SideBySideComparisonOptions
{
AdditionalChangeMarks = false,
ComparisonMode = ComparisonMode.Normal
});
Console.WriteLine("\n=== Document Comparison ===");
Console.WriteLine(docResult.HasChanges ? "Changes were detected" : "No changes detected");
Console.WriteLine($"First document changes count : {Count(docResult.FirstDocChanges)} ");
Console.WriteLine($"Second document changes count: {Count(docResult.SecondDocChanges)}");
Console.WriteLine($"Total changes count : {Count(docResult.FullChanges)}");
}
}
private static int Count<T>(List<List<T>> list)
{
int count = 0;
foreach (var innerList in list)
{
count += innerList.Count;
}
return count;
}
EditContainer es un objeto auxiliar que describe un cambio individual detectado durante la comparación de páginas (o documentos) PDF. Sirve como un “contenedor” que almacena el identificador del cambio, el tipo de diferencia, marcadores adicionales y coordenadas geométricas (rectángulos) que indican la ubicación exacta del cambio en la página.
| Propiedad | Tipo | Descripción |
|---|---|---|
Id |
int |
Un identificador único del cambio. Permite distinguir un cambio de otro en el resultado de la comparación. Se utiliza en anotaciones de cambios en las páginas. |
Operation |
DiffOperation |
El tipo de operación de diferencia que describe la naturaleza del cambio (inserción, eliminación, reemplazo, etc.). |
Rects |
List<Rectangle> |
Una colección de regiones rectangulares que cubren el fragmento modificado en la página. |
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:
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 compara 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 compara al agregar un array de diferencias a la imagen original. Para hacer esto, utiliza los métodos ImagesDifference.GetDestinationImage y ImagesDifference.DifferenceToImage.
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:
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");
}
}
}
}
}
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");
}
}
}
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 el anterior, pero también guarda los resultados de 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. |
ComparisonOptionsParámetros que afectan el proceso de comparación:
| Propiedad | Tipo | Descripción |
|---|---|---|
ExtractionArea |
Rectangle |
El área de la cual 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). |
DiffOperationRepresenta 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). |
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.