Отложенная загрузка DOCX страниц в WinForms/WPF просмотрщике

Категория: ImagingOffice.NET

19 апреля 2024

DOCX документ - это документ формата Microsoft Word Open XML, который содержит текст, изображения, графику и многое другое. Преимуществом DOCX документа является простое и интуитивно понятное редактирование контента документа. Недостатком DOCX документа является необходимость выполнить размещение контента документа, чтобы разбить документ на страницы. Иными словами, для 1000-страничного DOCX документа нужно выполнить рендеринг всех страниц документа, даже если необходимо посмотреть только последнюю страницу документа.

Если открыть DOCX документ с большим количеством страниц (1000 и более страниц) в Microsoft Office Word, то можно заметить, что Word открывает DOCX документ практически мгновенно и отображает несколько страниц (3-5 страниц). Далее в фоновом режиме Word производит загрузку всех остальных страниц документа. Это сделано, чтобы не пришлось ждать пока Word выполнит размещение всех страниц DOCX документа, что может выполняться достаточно долго. Отложенная загрузка DOCX страниц очень удобна, потому что можно быстро начать смотреть и редактировать начало документа. Если же нужно посмотреть или отредактировать последнюю страницу документа, то придется подождать пока Word не загрузит все страницы документа.

VintaSoft Imaging .NET SDK позволяет просматривать DOCX документы и по умолчанию SDK сначала получает информацию о всех страницах DOCX документа и только после этого можно посмотреть страницы DOCX документа в просмотрщике документов. Для больших DOCX документов (1000 и более страниц) это не удобно, потому что нужно подождать пока информация о всех страницах будет загружена и только после этого можно будет посмотреть страницы.

Также VintaSoft Imaging .NET SDK позволяет повторить поведение Microsoft Office Word, то есть получать информацию о страницах DOCX документа постепенно. Для того чтобы включить фоновое получение информации о страницах/изображениях в коллекции изображений необходимо использовать класс [ImageViewerImagesManager] и указать классу, что класс должен:

Вот C# код, который позволяет отображать страницы DOCX документа в просмотрщике документа с фоновой загрузкой информации о страницах DOCX документа:
/// <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");
}