Carga diferida de páginas DOCX en el visor WinForms/WPF

Categoría del blog: ImagingOffice.NET

19.04.2024

Un documento DOCX es un documento con formato Open XML de Microsoft Word que contiene texto, imágenes, gráficos y más. La ventaja de un documento DOCX es una edición simple e intuitiva de su contenido. La desventaja es que requiere maquetar el contenido para dividirlo en páginas. En otras palabras, para un documento DOCX de 1000 páginas, necesita renderizar todas las páginas del documento, incluso si solo necesita ver la última página.

Si abre un documento DOCX con muchas páginas (1000 o más) en Microsoft Office Word, notará que Word lo abre casi al instante y muestra solo algunas páginas (3-5). Posteriormente, Word carga el resto de las páginas del documento en segundo plano. Esto evita que el usuario tenga que esperar a que Word diseñe todas las páginas del documento DOCX, lo cual puede tardar bastante. La carga en segundo plano de páginas DOCX es muy práctica, ya que permite al usuario ver y editar rápidamente el principio del documento. Si necesita ver o editar la última página, debe esperar a que Word cargue todas las páginas.

El VintaSoft Imaging .NET SDK permite visualizar documentos DOCX y, por defecto, recupera información sobre todas las páginas del documento DOCX; solo después, estas páginas se pueden ver en el visor de documentos. Para documentos DOCX grandes (1000 o más páginas) esto no es conveniente.porque es necesario esperar hasta que se recupere la información sobre todas las páginas y solo entonces se podrán ver las páginas.

También VintaSoft Imaging .NET SDK permite reproducir el comportamiento de Microsoft Office Word, es decir, recuperar información sobre las páginas del documento DOCX en segundo plano. Para habilitar la recuperación en segundo plano de información sobre páginas/imágenes de una colección de imágenes, es necesario usar la clase [ImageViewerImagesManager] y especificar que la clase debe:

Aquí hay un código C# que permite mostrar páginas de documentos DOCX en el visor de documentos mientras se carga información sobre páginas de documentos DOCX en segundo plano:
/// <summary>
/// The images manager for an image viewer.
/// </summary>
Vintasoft.Imaging.UI.ImageViewerImagesManager _imagesManager;



/// <summary>
/// Initializes a new instance of the <see cref="MainForm1"/> class.
/// </summary>
public MainForm1()
{
    InitializeComponent();

    // create images manager
    _imagesManager = new Vintasoft.Imaging.UI.ImageViewerImagesManager(imageViewer1);
    // specify that manager should retrieve information about image from file during 1 second, add images to an image viewer,
    // do previous steps until information about all images will not be retrieved
    _imagesManager.IntermediateAddInterval = 1000;
    // specify that manager should work asynchronously
    _imagesManager.IsAsync = true;
    _imagesManager.ImageSourceAddException += ImagesManager_ImageSourceAddException;
}



/// <summary>
/// Opens an image file.
/// </summary>
/// <param name="filename">The filename.</param>
internal void OpenImageFile(string filename)
{
    // cancel previous file opening process
    CancelOpening();
    // clear image collection of manager
    _imagesManager.Images.ClearAndDisposeItems();
    // add image file to the manager
    _imagesManager.Add(filename);
}

/// <summary>
/// Cancels the opening of a file.
/// </summary>
private void CancelOpening()
{
    _imagesManager.Cancel();
}

private void ImagesManager_ImageSourceAddException(object sender, Vintasoft.Imaging.ImageSourceExceptionEventArgs e)
{
    string message = string.Format("Cannot open {0} : {1}", System.IO.Path.GetFileName(e.SourceFilename), e.Exception.Message);
    System.Windows.Forms.MessageBox.Show(message, "Error");
}