هل من الممكن إنتاج صورة معاينة صغيرة أو صورة مصغرة لتقرير كريستال في الكود؟

StackOverflow https://stackoverflow.com/questions/583389

سؤال

أنا أستخدم الكريستال لعرض التقارير في مشروعي، وأرغب في أن أكون قادرا على عرض صورة معاينة صغيرة أو صورة مصغرة للتقرير للمستخدم عندما يكون هو أو هي اختيار تقرير لعرضه من UI. هل هناك أي طريقة لإنتاج هذه الصور المصغرة ديناميكيا من التعليمات البرمجية؟

لدى المستخدم خيار إضافة أو إزالة التقارير عن طريق إضافة أو إزالةها من مجلد التقارير، لذلك فقط جعل جميع الصور المصغرة من خلال اليد ليست خيارا حقا.

هل كانت مفيدة؟

المحلول

لقد استخدمت كائن Dsofile للحصول على الصورة المصغرة داخل التقرير ثم استخدم Axhost لتحويل الكائن المرتجع إلى صورة يمكنني عرضها. لم يكن هذا هو الحل الذي أردت لكن Dsofile قابل للتوزيع بحرية لذلك أعتقد أن هذا سيعمل حتى أجد شيئا أفضل.

  1. تحميل وتثبيت DLL DSOFile من Microsoft.
  2. إضافة مرجع إلى ** DSO OLE خصائص وثيقة القارئ 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 أحصل على كائن الصورة المصغرة من التقرير وتمريره إلى طريقة التحويل. هذا يجب أن يعمل من أجل وثائق Office أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top