Muitas vezes precisamos comparar dois documentos MS Word DOC/DOCX para verificar as semelhanças ou diferenças. A comparação nos dá uma ideia do que foi alterado nas duas versões de um único documento do Word. Estão disponíveis vários aplicativos de comparação de documentos online que permitem comparar dois documentos do Word. No entanto, pode haver o caso de você precisar integrar recursos de comparação de documentos em seu aplicativo da web. Por outro lado, você pode querer criar seu próprio aplicativo de comparação de documentos online. Para lidar com esses casos, mostrarei como comparar dois DOCX do Word usando C# dentro do aplicativo Web ASP.NET. Este aplicativo terá os seguintes recursos.
- API C# .NET para comparar documentos do Word DOCX
- Comparar dois documentos do Word (DOC/DOCX) em C#
- Baixe o resultado da comparação em formato DOCX
- Baixe o resultado da comparação em formato PDF
API C# .NET para comparar o Word DOCX
Para realizar a comparação dos documentos do Word sem o MS Office, usaremos Aspose.Words for .NET, que é uma API de processamento de texto poderosa para ASP.NET ou outros aplicativos .NET/.NET Core. Você pode baixar API ou instalá-lo em seu aplicativo ASP.NET usando NuGet.
PM> Install-Package Aspose.Words
Comparar dois documentos do Word em C# ASP.NET
- Crie um novo aplicativo Web ASP.NET Core no Visual Studio 2017 ou posterior.
- Escolha o modelo de aplicativo da Web (Model-View-Controller).
- Instale o pacote Aspose.Words for .NET usando o NuGet Package Manager.
- Copie e cole o script a seguir na visualização 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>
// Opções de plug-in de arrastar e soltar
$("#input-id").fileinput({ 'showUpload': false, 'previewFileType': 'any', 'showClose': false });
$("#input-id2").fileinput({ 'showUpload': false, 'previewFileType': 'any', 'showClose': false });
</script>
- Copie e cole o seguinte método no controlador HomeController.cs.
[HttpPost]
public FileResult UploadFiles(List<IFormFile> files, string outputFormat)
{
if(files.Count()==0)
{
return null;
}
string fileName = "result.docx";
// Fazer upload de arquivos
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);
}
// Carregar documentos do Word
Document doc1 = new Document(file1);
Document doc2 = new Document(file2);
// Definir recursos de comparação
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 do Word
doc1.Compare(doc2, "John Doe", DateTime.Now, compareOptions);
if (outputFormat == "DOCX")
{
// Para resultado de comparação em DOCX
doc1.Save(outputStream, SaveFormat.Docx);
outputStream.Position = 0;
// Retornar arquivo do Word gerado
return File(outputStream, System.Net.Mime.MediaTypeNames.Application.Rtf, fileName);
}
else
{
// Para resultado de comparação em PDF
fileName = "result.pdf";
doc1.Save(outputStream, SaveFormat.Pdf);
outputStream.Position = 0;
// Retornar arquivo PDF gerado
return File(outputStream, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
}
}
- Insira os seguintes arquivos CSS e JS do plug-in de arrastar e soltar na tag head da visualização 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-->
- Compile o aplicativo e execute no navegador.
Aplicativo de comparação C# ASP.NET Word DOCX - Demo
A seguir está a demonstração de como comparar dois documentos do Word usando nosso aplicativo de comparação de documentos ASP.NET C#.
Baixe o aplicativo de comparação C# ASP.NET DOCX
Você pode baixar o código-fonte completo do aplicativo de comparação de documentos ASP.NET Word de aqui.
Sobre o Aspose.Words for .NET
Experimente o Aspose.Words for .NET gratuitamente
O Aspose oferece uma licença temporária para experimentar as APIs do Aspose gratuitamente. Obtenha o seu para avaliar o Aspose.Words for .NET.