Можно ли создать небольшой предварительный просмотр или уменьшенное изображение отчета Crystal в коде? - PullRequest
1 голос
/ 24 февраля 2009

Я использую Crystal для отображения отчетов в своем проекте, и я хотел бы иметь возможность отображать небольшое предварительное изображение или уменьшенное изображение отчета для пользователя, когда он выбирает отчет для отображения из моего UI. Есть ли способ динамически создавать эти эскизы из кода?

У пользователя есть возможность добавлять или удалять отчеты, добавляя или удаляя их из папки отчетов, так что просто сделать все миниатюрные изображения вручную на самом деле невозможно.

1 Ответ

2 голосов
/ 27 июля 2010

Я использовал объект DSOFile для получения миниатюры внутри отчета, затем использовал AxHost для преобразования возвращенного объекта в изображение, которое я мог отобразить. Это было не то решение, которое я хотел, но DSOFile распространяется свободно, поэтому я думаю, что это будет работать, пока я не найду что-то лучшее.

  1. Загрузите и установите DSOFile DLL от Microsoft.
  2. Добавить ссылку на ** DSO OLE Document Reader 2.1
  3. код

Вот мой код, сведенный к минимуму:

  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);
       }
   }

}

Я заполняю комбинированный список именами отчетов при загрузке формы. В событии SelectedIndexChanged я получаю объект Thumbnail из отчета и передаю его методу преобразования. Это должно работать и для документов Office.

...