Comparar documentos de Word en ASP.NET

A menudo necesitamos comparar dos documentos DOC/DOCX de MS Word para verificar las similitudes o diferencias. La comparación nos da una idea de lo que se ha cambiado en las dos versiones de un mismo documento de Word. Hay varias aplicaciones de comparación de documentos en línea disponibles que le permiten comparar dos documentos de Word. Sin embargo, podría darse el caso de que necesite integrar funciones de comparación de documentos dentro de su aplicación web. Por otro lado, es posible que desee crear su propia aplicación de comparación de documentos en línea. Para tratar estos casos, le mostraré cómo comparar dos documentos de Word usando C# dentro de la aplicación web ASP.NET. Esta aplicación tendrá las siguientes características.

  • Compara dos documentos de Word (DOC/DOCX)
  • Descarga el resultado de la comparación en formato DOCX
  • Descarga el resultado de la comparación en formato PDF

API .NET para comparar documentos de Word

Para realizar la comparación de los documentos de Word sin MS Office, usaremos Aspose.Words for .NET, que es una potente API de procesamiento de textos para ASP.NET u otras aplicaciones .NET/.NET Core. Puede descargar API o instalarla dentro de su aplicación ASP.NET usando NuGet.

PM> Install-Package Aspose.Words

Compara dos documentos de Word en C# ASP.NET

  • Cree una nueva aplicación web ASP.NET Core en Visual Studio 2017 o posterior.
Crear una aplicación web ASP.NET Core
  • Elija la plantilla Aplicación web (Modelo-Vista-Controlador).
Seleccione la aplicación MVC
  • Instale el paquete Aspose.Words for .NET mediante NuGet Package Manager.
API .NET para comparación de palabras
  • Copie y pegue el siguiente script en la vista index.cshtml.
@{
    ViewData["Title"] = "MS Word Comparison in ASP.NET";
}
<h2 class="text-info">Compare Two Word DOC/DOCX Documents</h2>
<p class="text-info">Compare the contents of MS Word documents and get the results in DOCX or PDF format.</p>
<br />
<form asp-controller="Home" asp-action="UploadFiles" method="post" class="form-inline dropzone" enctype="multipart/form-data">
    <div class="row">
        <div class="col-md-6" align="center"> 
            <div class="form-group">
                <input type="file" id="input-id" name="files" accept=".doc, .docx" class="form-control file" data-preview-file-type="text" />
            </div>
        </div>
        <div class="col-md-6" align="center"> 
            <div class="form-group">
                <input type="file" id="input-id2" name="files" accept=".doc, .docx" class="form-control file" />
            </div>
        </div>
    </div>
    <br />
    <div class="row">
        <div class="col-md-12" align="center">
            <div class="form-group">
                <p class="text-info">
                    <strong>Output format:</strong>
                    <select name="outputFormat" class="form-control">
                        <option value="DOCX">DOCX</option>
                        <option value="PDF">PDF</option>
                    </select>
                </p>

            </div>
            <div class="col-md-12" align="center">
                <div class="form-group">
                    <button type="submit" class="form-control btn btn-success">Compare and Download</button>
                </div>
            </div>
        </div>
    </div>
</form>
<script> 
    // Opciones de complemento de arrastrar y soltar
    $("#input-id").fileinput({ 'showUpload': false, 'previewFileType': 'any', 'showClose': false });
    $("#input-id2").fileinput({ 'showUpload': false, 'previewFileType': 'any', 'showClose': false });
</script>
  • Copie y pegue el siguiente método en el controlador HomeController.cs.
[HttpPost]
public FileResult UploadFiles(List<IFormFile> files, string outputFormat)
{
	if(files.Count()==0)
	{
		return null;
	}
	string fileName = "result.docx";
	// Subir archivos
	var file1 = Path.Combine("wwwroot/uploads", files[0].FileName);
	var file2 = Path.Combine("wwwroot/uploads", files[1].FileName);
	using (var stream = new FileStream(file1, FileMode.Create))
	{
		files[0].CopyTo(stream);
	}
	using (var stream = new FileStream(file2, FileMode.Create))
	{
		files[1].CopyTo(stream);
	}
	// Cargar documentos de Word
	Document doc1 = new Document(file1);
	Document doc2 = new Document(file2);
	// Establecer características de comparación
	CompareOptions compareOptions = new CompareOptions();
	compareOptions.IgnoreFormatting = true;
	compareOptions.IgnoreCaseChanges = true;
	compareOptions.IgnoreComments = true;
	compareOptions.IgnoreTables = true;
	compareOptions.IgnoreFields = true;
	compareOptions.IgnoreFootnotes = true;
	compareOptions.IgnoreTextboxes = true;
	compareOptions.IgnoreHeadersAndFooters = true;
	compareOptions.Target = ComparisonTargetType.New;

	var outputStream = new MemoryStream();
	// Comparar documentos de Word
	doc1.Compare(doc2, "John Doe", DateTime.Now, compareOptions);
	if (outputFormat == "DOCX")
	{
		// Para el resultado de la comparación en DOCX
		doc1.Save(outputStream, SaveFormat.Docx);
		outputStream.Position = 0;
		// Devolver el archivo de Word generado
		return File(outputStream, System.Net.Mime.MediaTypeNames.Application.Rtf, fileName);
	}
	else
	{
		// Para el resultado de la comparación en PDF
		fileName = "result.pdf";
		doc1.Save(outputStream, SaveFormat.Pdf);
		outputStream.Position = 0;
		// Devolver el archivo PDF generado
		return File(outputStream, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
	}    
}
  • Inserte los siguientes archivos CSS y JS del complemento de arrastrar y soltar en la etiqueta principal de la vista \layout.cshtml.
<!--drag and drop file plugin-->
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-fileinput/5.0.9/css/fileinput.min.css" media="all" rel="stylesheet" type="text/css" />
<script src="https://code.jquery.com/jquery-3.3.1.min.js" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-fileinput/5.0.9/js/fileinput.min.js"></script> 
<!--end of drag and drop-->
  • Cree la aplicación y ejecútela en el navegador.

Aplicación de comparación de documentos de Word ASP.NET - Demostración

La siguiente es la demostración de cómo comparar dos documentos de Word utilizando nuestra aplicación de comparación de documentos ASP.NET.

Compara Word DOCX en ASP.NET

Comparando Word DOCX en ASP.NET

Descargar

Puede descargar el código fuente completo de la aplicación de comparación de documentos ASP.NET Word desde aquí.

Acerca de Aspose.Words for .NET

Pruebe Aspose.Words for .NET gratis

Aspose ofrece una licencia temporal para probar las API de Aspose de forma gratuita. Obtenga el suyo para evaluar Aspose.Words for .NET.

Artículo relacionado