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.
- Elija la plantilla Aplicación web (Modelo-Vista-Controlador).
- Instale el paquete Aspose.Words for .NET mediante NuGet Package Manager.
- 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.
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.