1

私はCrystalを使用してプロジェクトのレポートを表示していますが、ユーザーがUIから表示するレポートを選択するときに、レポートの小さなプレビューまたはサムネイル画像をユーザーに表示できるようにしたいと思います。これらのサムネイルをコードから動的に生成する方法はありますか?

ユーザーには、レポートフォルダーにレポートを追加または削除することでレポートを追加または削除するオプションがあるため、すべてのサムネイル画像を手動で作成するだけでは実際にはオプションではありません。

4

1 に答える 1

2

DSOFile オブジェクトを使用してレポート内のサムネイルを取得し、次に AxHost を使用して、返されたオブジェクトを表示可能な画像に変換しました。これは私が望んでいた解決策ではありませんでしたが、DSOFile は自由に配布できるので、もっと良いものが見つかるまではうまくいくと思います。

  1. Microsoft から DSOFile DLL をダウンロードしてインストールします。
  2. **DSO OLE Document Properties 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 ドキュメントでも機能するはずです。

于 2010-07-27T19:30:13.600 に答える