Comparer des documents Word dans ASP.NET

Nous avons souvent besoin de comparer deux documents MS Word DOC/DOCX pour vérifier les similitudes ou les différences. La comparaison nous donne une idée de ce qui a été modifié dans les deux versions d’un même document Word. Diverses applications comparaison de documents en ligne sont disponibles pour vous permettre de comparer deux documents Word. Cependant, il peut arriver que vous ayez besoin d’intégrer des fonctionnalités de comparaison de documents dans votre application Web. D’autre part, vous pouvez créer votre propre application de comparaison de documents en ligne. Pour faire face à de tels cas, je vais vous montrer comment comparer deux documents Word à l’aide de C# dans l’application Web ASP.NET. Cette application aura les fonctionnalités suivantes.

  • Comparer deux documents Word (DOC/DOCX)
  • Téléchargez le résultat de la comparaison au format DOCX
  • Téléchargez le résultat de la comparaison au format PDF

API .NET pour comparer des documents Word

Pour effectuer la comparaison des documents Word sans MS Office, nous utiliserons Aspose.Words for .NET qui est une puissante API de traitement de texte pour ASP.NET ou d’autres applications .NET/.NET Core. Vous pouvez télécharger l’API ou l’installer dans votre application ASP.NET à l’aide de NuGet.

PM> Install-Package Aspose.Words

Comparer deux documents Word en C# ASP.NET

  • Créez une nouvelle application Web ASP.NET Core dans Visual Studio 2017 ou version ultérieure.
Créer une application Web ASP.NET Core
  • Choisissez le modèle Application Web (Modèle-Vue-Contrôleur).
Sélectionnez l'application MVC
  • Installez le package Aspose.Words for .NET à l’aide du gestionnaire de packages NuGet.
API .NET pour la comparaison de mots
  • Copiez et collez le script suivant dans la vue 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> 
    // Glisser-déposer les options du plug-in
    $("#input-id").fileinput({ 'showUpload': false, 'previewFileType': 'any', 'showClose': false });
    $("#input-id2").fileinput({ 'showUpload': false, 'previewFileType': 'any', 'showClose': false });
</script>
  • Copiez et collez la méthode suivante dans le contrôleur HomeController.cs.
[HttpPost]
public FileResult UploadFiles(List<IFormFile> files, string outputFormat)
{
	if(files.Count()==0)
	{
		return null;
	}
	string fileName = "result.docx";
	// Télécharger des fichiers
	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);
	}
	// Charger des documents Word
	Document doc1 = new Document(file1);
	Document doc2 = new Document(file2);
	// Définir les fonctionnalités de comparaison
	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();
	// Comparer des documents Word
	doc1.Compare(doc2, "John Doe", DateTime.Now, compareOptions);
	if (outputFormat == "DOCX")
	{
		// Pour résultat de comparaison dans DOCX
		doc1.Save(outputStream, SaveFormat.Docx);
		outputStream.Position = 0;
		// Renvoyer le fichier Word généré
		return File(outputStream, System.Net.Mime.MediaTypeNames.Application.Rtf, fileName);
	}
	else
	{
		// Pour le résultat de la comparaison en PDF
		fileName = "result.pdf";
		doc1.Save(outputStream, SaveFormat.Pdf);
		outputStream.Position = 0;
		// Renvoyer le fichier PDF généré
		return File(outputStream, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
	}    
}
  • Insérez les fichiers CSS et JS suivants du plugin glisser-déposer dans la balise head de la vue 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-->
  • Générez l’application et exécutez-la dans le navigateur.

Application de comparaison de documents Word ASP.NET - Démo

Ce qui suit est la démonstration de la façon de comparer deux documents Word à l’aide de notre application de comparaison de documents ASP.NET.

Comparer Word DOCX dans ASP.NET

Comparaison de Word DOCX dans ASP.NET

Télécharger

Vous pouvez télécharger le code source complet de l’application de comparaison de documents ASP.NET Word depuis ici.

À propos d’Aspose.Words for .NET

Essayez gratuitement Aspose.Words for .NET

Aspose propose une licence temporaire pour essayer gratuitement les API Aspose. Obtenez le vôtre pour évaluer Aspose.Words for .NET.

Article associé