Spécifier les options de chargement

Lors du chargement d’un document, vous pouvez définir certaines propriétés avancées. Aspose.Words vous fournit la classe LoadOptions, qui permet un contrôle plus précis du processus de chargement. Certains formats de chargement ont une classe correspondante qui contient les options de chargement pour ce format de chargement, par exemple, il existe PdfLoadOptions pour le chargement au format PDF ou TxtLoadOptions pour le chargement au format TXT. Cet article fournit des exemples d’utilisation des options de la classe LoadOptions.

Définir la version Microsoft Word pour modifier l’apparence

Différentes versions de l’application Microsoft Word peuvent afficher les documents différemment. Par exemple, il existe un problème bien connu avec les documents OOXML tels que DOCX ou DOTX produits à l’aide de WPS Office. Dans ce cas, des éléments essentiels de balisage du document peuvent être manquants ou être interprétés différemment, ce qui amène Microsoft Word 2019 à afficher un tel document différemment par rapport à Microsoft Word 2010.

Par défaut, Aspose.Words ouvre les documents en utilisant les règles Microsoft Word 2019. Si vous devez faire apparaître le chargement du document comme il se produirait dans l’une des versions précédentes de l’application Microsoft Word, vous devez spécifier explicitement la version souhaitée à l’aide de la propriété MswVersion de la classe LoadOptions.

L’exemple de code suivant montre comment définir la version Microsoft Word avec les options de chargement:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Create a new LoadOptions object, which will load documents according to MS Word 2019 specification by default
// and change the loading version to Microsoft Word 2010.
LoadOptions loadOptions = new LoadOptions { MswVersion = MsWordVersion.Word2010 };
Document doc = new Document(MyDir + "Document.docx", loadOptions);
doc.Save(ArtifactsDir + "WorkingWithLoadOptions.SetMsWordVersion.docx");

Définir les préférences de langue pour modifier l’apparence

Les détails de l’affichage d’un document dans Microsoft Word dépendent non seulement de la version de l’application et de la valeur de la propriété MswVersion, mais également des paramètres de langue. Microsoft Word peut afficher les documents différemment en fonction des paramètres de la boîte de dialogue “Préférences de langue Office”, disponibles dans “Fichier → Options → Langue”. À l’aide de cette boîte de dialogue, un utilisateur peut sélectionner, par exemple, la langue principale, les langues de vérification, les langues d’affichage, etc. Aspose.Words fournit la propriété LanguagePreferences comme équivalent de cette boîte de dialogue. Si la sortie Aspose.Words diffère de la sortie Microsoft Word, définissez la valeur appropriée pour EditingLanguage – cela peut améliorer le document de sortie.

L’exemple de code suivant montre comment définir le japonais comme EditingLanguage:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions();
// Set language preferences that will be used when document is loading.
loadOptions.LanguagePreferences.AddEditingLanguage(EditingLanguage.Japanese);
Document doc = new Document(MyDir + "No default editing language.docx", loadOptions);
int localeIdFarEast = doc.Styles.DefaultFont.LocaleIdFarEast;
Console.WriteLine(
localeIdFarEast == (int)EditingLanguage.Japanese
? "The document either has no any FarEast language set in defaults or it was set to Japanese originally."
: "The document default FarEast language was set to another than Japanese language originally, so it is not overridden.");

Utilisez WarningCallback pour contrôler les problèmes lors du chargement d’un document

Certains documents peuvent être corrompus, contenir des entrées non valides ou comporter des fonctionnalités qui ne sont actuellement pas prises en charge par Aspose.Words. Si vous souhaitez connaître les problèmes survenus lors du chargement d’un document, Aspose.Words fournit l’interface IWarningCallback.

L’exemple de code suivant montre l’implémentation de l’interface IWarningCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public class DocumentLoadingWarningCallback : IWarningCallback
{
public void Warning(WarningInfo info)
{
// Prints warnings and their details as they arise during document loading.
Console.WriteLine($"WARNING: {info.WarningType}, source: {info.Source}");
Console.WriteLine($"\tDescription: {info.Description}");
}
}

Pour obtenir des informations sur tous les problèmes tout au long du temps de chargement, utilisez la propriété WarningCallback.

L’exemple de code suivant montre comment utiliser cette propriété:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { WarningCallback = new DocumentLoadingWarningCallback() };
Document doc = new Document(MyDir + "Document.docx", loadOptions);

Utilisez ResourceLoadingCallback pour contrôler le chargement des ressources externes

Un document peut contenir des liens externes vers des images situées quelque part sur un disque local, un réseau ou Internet. Aspose.Words charge automatiquement ces images dans un document, mais il existe des situations où ce processus doit être contrôlé. Par exemple, pour décider si nous devons réellement charger une certaine image ou peut-être la sauter. L’option de chargement ResourceLoadingCallback vous permet de contrôler cela.

L’exemple de code suivant montre l’implémentation de l’interface IResourceLoadingCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
private class HtmlLinkedResourceLoadingCallback : IResourceLoadingCallback
{
public ResourceLoadingAction ResourceLoading(ResourceLoadingArgs args)
{
switch (args.ResourceType)
{
case ResourceType.CssStyleSheet:
{
Console.WriteLine($"External CSS Stylesheet found upon loading: {args.OriginalUri}");
// CSS file will don't used in the document.
return ResourceLoadingAction.Skip;
}
case ResourceType.Image:
{
// Replaces all images with a substitute.
Image newImage = Image.FromFile(ImagesDir + "Logo.jpg");
ImageConverter converter = new ImageConverter();
byte[] imageBytes = (byte[])converter.ConvertTo(newImage, typeof(byte[]));
args.SetData(imageBytes);
// New images will be used instead of presented in the document.
return ResourceLoadingAction.UserProvided;
}
case ResourceType.Document:
{
Console.WriteLine($"External document found upon loading: {args.OriginalUri}");
// Will be used as usual.
return ResourceLoadingAction.Default;
}
default:
throw new InvalidOperationException("Unexpected ResourceType value.");
}
}
}

L’exemple de code suivant montre comment utiliser la propriété ResourceLoadingCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { ResourceLoadingCallback = new HtmlLinkedResourceLoadingCallback() };
// When we open an Html document, external resources such as references to CSS stylesheet files
// and external images will be handled customarily by the loading callback as the document is loaded.
Document doc = new Document(MyDir + "Images.html", loadOptions);
doc.Save(ArtifactsDir + "WorkingWithLoadOptions.ResourceLoadingCallback.pdf");

Utilisez TempFolder pour éviter une exception de mémoire

Aspose.Words prend en charge des documents extrêmement volumineux contenant des milliers de pages remplies de contenu riche. Le chargement de tels documents peut nécessiter beaucoup de RAM. Lors du processus de chargement, Aspose.Words a besoin d’encore plus de mémoire pour contenir les structures temporaires utilisées pour analyser un document.

Si vous rencontrez un problème avec l’exception de mémoire insuffisante lors du chargement d’un document, essayez d’utiliser la propriété TempFolder. Dans ce cas, Aspose.Words stockera certaines données dans des fichiers temporaires plutôt que dans la mémoire, ce qui peut aider à éviter une telle exception.

L’exemple de code suivant montre comment définir TempFolder:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { TempFolder = ArtifactsDir };
Document doc = new Document(MyDir + "Document.docx", loadOptions);

Définir l’encodage explicitement

La plupart des formats de documents modernes stockent leur contenu au format Unicode et ne nécessitent aucune manipulation particulière. D’un autre côté, de nombreux documents utilisent encore un certain codage pré-Unicode et parfois, soit ils manquent d’informations de codage, soit ne prennent même pas en charge les informations de codage par nature. Aspose.Words essaie de détecter automatiquement l’encodage approprié par défaut, mais dans de rares cas, vous devrez peut-être utiliser un encodage différent de celui détecté par notre algorithme de reconnaissance d’encodage. Dans ce cas, utilisez la propriété Encoding pour obtenir ou définir l’encodage.

L’exemple de code suivant montre comment définir l’encodage pour remplacer l’encodage choisi automatiquement:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
LoadOptions loadOptions = new LoadOptions { Encoding = Encoding.UTF7 };
Document doc = new Document(MyDir + "Encoded in UTF-7.txt", loadOptions);

Charger des documents cryptés

Vous pouvez charger des documents Word cryptés avec un mot de passe. Pour ce faire, utilisez une surcharge de constructeur spéciale, qui accepte un objet LoadOptions. Cet objet contient la propriété Password, qui spécifie la chaîne du mot de passe.

L’exemple de code suivant montre comment charger un document chiffré avec un mot de passe:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
Document doc = new Document(MyDir + "Encrypted.docx", new LoadOptions("docPassword"));

Si vous ne savez pas à l’avance si le fichier est crypté, vous pouvez utiliser la classe FileFormatUtil, qui fournit des méthodes utilitaires pour travailler avec les formats de fichiers, telles que la détection du format de fichier ou la conversion d’extensions de fichier vers/à partir d’énumérations de formats de fichiers. Pour détecter si le document est crypté et nécessite un mot de passe pour l’ouvrir, utilisez la propriété IsEncrypted.

L’exemple de code suivant montre comment vérifier qu’OpenDocument est chiffré ou non:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
FileFormatInfo info = FileFormatUtil.DetectFileFormat(MyDir + "Encrypted.odt");
Console.WriteLine(info.IsEncrypted);