Comparar documentos do Word no ASP.NET

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.
Criar aplicativo Web ASP.NET Core
  • Escolha o modelo de aplicativo da Web (Model-View-Controller).
Selecione o aplicativo MVC
  • Instale o pacote Aspose.Words for .NET usando o NuGet Package Manager.
.NET API para comparação de palavras
  • 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#.

Compare o Word DOCX no ASP.NET

Comparando o Word DOCX no ASP.NET

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.

Artigo relacionado