Especificar opciones de carga

Al cargar un documento, puede configurar algunas propiedades avanzadas. Aspose.Words te proporciona la clase LoadOptions, que permite un control más preciso del proceso de carga. Algunos formatos de carga tienen una clase correspondiente que contiene opciones de carga para este formato de carga, por ejemplo, hay PdfLoadOptions para cargar en formato PDF o TxtLoadOptions para cargar en TXT. Este artículo proporciona ejemplos de cómo trabajar con opciones de la clase LoadOptions.

Configure la versión de Microsoft Word para cambiar la apariencia

Las diferentes versiones de la aplicación Microsoft Word pueden mostrar documentos de manera diferente. Por ejemplo, existe un problema bien conocido con los documentos OOXML como DOCX o DOTX producidos con WPS Office. En tal caso, es posible que falten elementos esenciales de marcado del documento o que se interpreten de manera diferente, lo que hace que Microsoft Word 2019 muestre dicho documento de manera diferente en comparación con Microsoft Word 2010.

De forma predeterminada, Aspose.Words abre documentos utilizando las reglas Microsoft Word 2019. Si necesita que la carga del documento aparezca como sucedería en una de las versiones anteriores de la aplicación Microsoft Word, debe especificar explícitamente la versión deseada utilizando la propiedad MswVersion de la clase LoadOptions.

El siguiente ejemplo de código muestra cómo configurar la versión Microsoft Word con opciones de carga:

// 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");

Establecer preferencias de idioma para cambiar la apariencia

Los detalles de mostrar un documento en Microsoft Word dependen no sólo de la versión de la aplicación y el valor de la propiedad MswVersion sino también de la configuración del idioma. Microsoft Word puede mostrar documentos de manera diferente dependiendo de la configuración del cuadro de diálogo “Preferencias de idioma de Office”, que se puede encontrar en “Archivo → Opciones → Idioma”. Al utilizar este cuadro de diálogo, un usuario puede seleccionar, por ejemplo, el idioma principal, los idiomas de revisión, los idiomas de visualización, etc. Aspose.Words proporciona la propiedad LanguagePreferences como equivalente de este cuadro de diálogo. Si la salida Aspose.Words difiere de la salida Microsoft Word, establezca el valor apropiado para EditingLanguage; esto puede mejorar el documento de salida.

El siguiente ejemplo de código muestra cómo configurar el japonés como 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.");

Utilice WarningCallback para controlar problemas al cargar un documento

Algunos documentos pueden estar dañados, contener entradas no válidas o tener funciones que Aspose.Words no admite actualmente. Si desea conocer los problemas que ocurrieron al cargar un documento, Aspose.Words proporciona la interfaz IWarningCallback.

El siguiente ejemplo de código muestra la implementación de la interfaz 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}");
}
}

Para obtener información sobre todos los problemas durante el tiempo de carga, utilice la propiedad WarningCallback.

El siguiente ejemplo de código muestra cómo utilizar esta propiedad:

// 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);

Utilice ResourceLoadingCallback para controlar la carga de recursos externos

Un documento puede contener enlaces externos a imágenes ubicadas en algún lugar de un disco local, red o Internet. Aspose.Words carga automáticamente dichas imágenes en un documento, pero hay situaciones en las que es necesario controlar este proceso. Por ejemplo, para decidir si realmente necesitamos cargar una determinada imagen o quizás omitirla. La opción de carga ResourceLoadingCallback le permite controlar esto.

El siguiente ejemplo de código muestra la implementación de la interfaz 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.");
}
}
}

El siguiente ejemplo de código muestra cómo utilizar la propiedad 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");

Utilice TempFolder para evitar una excepción de memoria

Aspose.Words admite documentos extremadamente grandes que tienen miles de páginas llenas de contenido enriquecido. Cargar dichos documentos puede requerir mucha RAM. En el proceso de carga, Aspose.Words necesita aún más memoria para contener las estructuras temporales utilizadas para analizar un documento.

Si tiene un problema con la excepción de falta de memoria al cargar un documento, intente utilizar la propiedad TempFolder. En este caso, Aspose.Words almacenará algunos datos en archivos temporales en lugar de en la memoria, y esto puede ayudar a evitar dicha excepción.

El siguiente ejemplo de código muestra cómo configurar 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);

Establecer la codificación explícitamente

La mayoría de los formatos de documentos modernos almacenan su contenido en Unicode y no requieren un manejo especial. Por otro lado, todavía hay muchos documentos que utilizan alguna codificación anterior a Unicode y, a veces, omiten información de codificación o ni siquiera admiten información de codificación por naturaleza. Aspose.Words intenta detectar automáticamente la codificación adecuada de forma predeterminada, pero en casos excepcionales es posible que necesite utilizar una codificación diferente a la detectada por nuestro algoritmo de reconocimiento de codificación. En este caso, utilice la propiedad Encoding para obtener o configurar la codificación.

El siguiente ejemplo de código muestra cómo configurar la codificación para anular la codificación elegida automáticamente:

// 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);

Cargar documentos cifrados

Puede cargar documentos de Word cifrados con una contraseña. Para hacer esto, use una sobrecarga de constructor especial, que acepta un objeto LoadOptions. Este objeto contiene la propiedad Password, que especifica la cadena de contraseña.

El siguiente ejemplo de código muestra cómo cargar un documento cifrado con una contraseña:

// 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 no sabe de antemano si el archivo está cifrado, puede utilizar la clase FileFormatUtil, que proporciona métodos de utilidad para trabajar con formatos de archivo, como detectar el formato de archivo o convertir extensiones de archivo a/desde enumeraciones de formatos de archivo. Para detectar si el documento está cifrado y requiere una contraseña para abrirlo, utilice la propiedad IsEncrypted.

El siguiente ejemplo de código muestra cómo verificar OpenDocument, ya sea que esté cifrado o no:

// 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);