Un documento DOCX è un documento in formato Microsoft Word Open XML che contiene testo, immagini, grafica e altro. Il vantaggio di un documento DOCX è la possibilità di modificare il suo contenuto in modo semplice e intuitivo. Lo svantaggio di un documento DOCX è che richiede di impostare il contenuto del documento per suddividerlo in pagine. In altre parole, per un documento DOCX di 1000 pagine, è necessario visualizzare tutte le pagine del documento, anche se si desidera visualizzare solo l'ultima pagina.
Se si apre un documento DOCX con un numero elevato di pagine (1000 o più pagine) in Microsoft Office Word, si noterà che Word apre il documento DOCX quasi istantaneamente e visualizza solo alcune pagine (3-5 pagine). Successivamente, in background, Word carica tutte le altre pagine del documento. Questo viene fatto in modo che l'utente non debba attendere che Word impagina tutte le pagine del documento DOCX, operazione che può richiedere molto tempo. Il caricamento in background delle pagine DOCX è molto comodo, poiché l'utente può iniziare rapidamente a visualizzare e modificare l'inizio del documento. Se l'utente deve visualizzare o modificare l'ultima pagina del documento, è necessario attendere che Word carichi tutte le pagine del documento.
VintaSoft Imaging .NET SDK consente di visualizzare i documenti DOCX e, per impostazione predefinita, recupera informazioni su tutte le pagine del documento DOCX e solo dopo le pagine del documento DOCX possono essere visualizzate nel visualizzatore di documenti. Per documenti DOCX di grandi dimensioni (1000 o più pagine) questo non è comodo, perché è necessario attendere che vengano recuperate le informazioni su tutte le pagine e solo allora le pagine potranno essere visualizzate.
Inoltre VintaSoft Imaging .NET SDK consente di riprodurre il comportamento di Microsoft Office Word, ovvero di recuperare informazioni sulle pagine del documento DOCX in background. Per abilitare il recupero in background delle informazioni sulle pagine/immagini di una raccolta di immagini, è necessario utilizzare la classe [ImageViewerImagesManager] e specificare che la classe deve:
- recuperare le informazioni sulle pagine da un documento DOCX entro un certo tempo (ad esempio 1 secondo)
- aggiungere le pagine DOCX con layout al visualizzatore di documenti
- eseguire i passaggi precedenti finché tutte le pagine DOCX non sono state caricate nel visualizzatore di documenti
Ecco il codice C# che consente di visualizzare le pagine del documento DOCX nel visualizzatore di documenti durante il caricamento delle informazioni sulle pagine del documento DOCX in background:
/// <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");
}