pour afficher le contenu  d'un fichier XPS il suffit d'une simple méthode LoadXpsFile qui reçoit en paramètres le nom du fichier et qui l'affiche dans un DocumentViewer . Cette méthode est bien expliquée dans la plupart des documents XPS de microsoft. Elle se résume au snippet de code suivant:


        public void LoadXpsFile(string xpsFile)
        {
            XpsDocument xpsd = new XpsDocument(xpsFile, FileAccess.Read);
            documentViewer.Document = xpsd.GetFixedDocumentSequence();
            xpsd.Close();
       }

Avec un Xaml qui contient

             <DocumentViewer Name="documentViewer" />

et un bouton qui déclenche la lecture du fichier: appel à la méthode LoadXpsFile(). Le seul problème ce que des fichiers XPS comme le suivant

  • image.xps
  •  
    ne s'affichent pas dans le documentViewer, alors qu'ils s'affichent dans la visionneuse de Microsoft. Même qu'ils s'impriment correctement à partir du documentViewer et sont copiables en tant qu'images dans le clipboard sans problème.

    Ce dysfonctionnement disparaît complètement si on enlève de la méthode LoadXpsFile l'appel à xpsd.Close() avec tout ce que cela peut entraîner comme risque d'exception au moment de la réécriture du fichier  XPS.

     

    Autrement dit ce bug pourrait cacher d'autres problèmes dans la gestion du documentViewer. Il n'est observé que dans le cas de certaines images (qu'il faudrait essayer d'analyser la structure et les raisons de ce comportement) ainsi nous pourrons (en boite noire) situer le problème du documentViewer, et probablement expliquer la raison du fait que quelques fichiers Xps ne sont pas libérés après lecture dans le documentViewer, un problème signalé à maintes reprises par les développeurs (malgré la présence du Close dans leurs programmes).

     

     

    Pour contourner le problème il faut bien sûr enlever le Close de la méthode et mettre l’ensemble dans une fenêtre indépendante qui fermera automatiquement le fichier au moment de sa fermeture, ce qui sera transparent aux utilisateurs.

     

    Il y aura probablement d’autres moyens de contournement qui ne manqueront pas d’élégance.

     

     

                                                                                                                                                                 .../...