Question

Je l'aide de Crystal pour afficher les rapports dans mon projet, et je voudrais être en mesure d'afficher un petit aperçu ou l'image miniature du rapport à l'utilisateur quand il ou elle est de choisir un rapport pour afficher de mon interface utilisateur. Est-il possible de produire ces vignettes dynamiquement à partir du code?

L'utilisateur a la possibilité d'ajouter ou de supprimer des rapports en ajoutant ou en les retirant du dossier rapports, donc juste faire toutes les images miniatures à la main est pas vraiment une option.

Était-ce utile?

La solution

j'obtenir la vignette à l'intérieur du rapport, puis utilisé AxHost pour convertir l'objet retourné à une image que je pouvais afficher l'objet Dsofile. Ce ne fut pas la solution que je voulais, mais le Dsofile est librement distribuable je suppose que cela va fonctionner jusqu'à ce que je trouve quelque chose de mieux.

  1. Télécharger et installer la Dsofile DLL de Microsoft.
  2. Ajoutez une référence à ** Propriétés du document OLE DSO lecteur 2.1
  3. code

Voici mon code, bouilli vers le bas au strict minimum:

  namespace Ibs.Ui.OrderPrint
  {
    public partial class OrderPrintEdit
    {
       public OrderPrintEdit()
       {
        InitializeComponent();
       }

       #region -- reports_SelectedIndexChanged(sender, e) Event Handler --
       private void reports_SelectedIndexChanged(object sender, EventArgs e)
       {
           try
           {
               DSOFile.OleDocumentPropertiesClass oleDocumentPropertiesClass = new DSOFile.OleDocumentPropertiesClass();
               DirectoryInfo reportDirectory = new DirectoryInfo(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\Reports");
               oleDocumentPropertiesClass.Open(reportDirectory + "\\" + reports.Text,true,DSOFile.dsoFileOpenOptions.dsoOptionDontAutoCreate);
               Object thumbnail = oleDocumentPropertiesClass.SummaryProperties.Thumbnail;
               if (thumbnail != null)
               {
                   reportThumbnail.BackgroundImage = IPictureDispHost.GetPictureFromIPicture(thumbnail);
               }
               else
               {
                   reportThumbnail.BackgroundImage = null;
               }
               oleDocumentPropertiesClass.Close(false);
           }
           catch (Exception ex)
           {
           }
       }
       #endregion
   }

   internal sealed class IPictureDispHost : AxHost
   {
       private IPictureDispHost() : base("{63109182-966B-4e3c-A8B2-8BC4A88D221C}")
       {
       }
       /// <summary>
       /// Convert the dispatch interface into an image object.
       /// </summary>
       /// <param name="picture">The picture interface</param>
       /// <returns>An image instance.</returns>
       public new static Image GetPictureFromIPicture(object picture)
       {
           return AxHost.GetPictureFromIPicture(picture);
       }
   }

}

Je suis le remplissage d'un combobox avec des noms de rapport sur la charge de forme. En cas SelectedIndexChanged je reçois l'objet miniature du rapport et le transmettre à la méthode de conversion. Cela devrait fonctionner pour les documents Office aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top