استخدام Aspose.Slides مع ReportViewer 2010 و 2012
Contents
[
Hide
]
تعلّمك هذه المقالة كيفية تصدير التقارير من ReportViewer 2010/2012 إلى عرض تقديمي PowerPoint.
صفِّة RplRenderer تقوم برسم تخطيط صفحة التقرير (RPL) تنسيق تيار ثنائي إلى عرض تقديمي PowerPoint.
تستخدم RplRenderer فواصل الصفحات الناعمة للتحكم في حجم الصفحة باستخدام علامات RDL InteractiveHeight و InteractiveWidth.
عينة من الكود
سيظهر هذا الكود كيفية تصدير تقرير من ReportViewer 2010/2012 إلى PPT/PPTX باستخدام RplRenderer. نفّذ أسلوب RenderToPpt لرسم تقرير حالي إلى PPT.
using System;
using System.Collections;
using System.IO;
using System.Reflection;
using Microsoft.Reporting.WinForms;
namespace Slides.ReportViewer2010
{
class SlidesExportHelper
{ /// <summary>
/// يرسم التقرير الحالي إلى عرض تقديمي PowerPoint
/// </summary>
/// <param name="reportViewer">كائن عارض التقرير.</param>
/// <param name="format">تنسيق العرض التقديمي الناتج.</param>
/// <param name="filename">اسم الملف الناتج.</param>
public static void RenderWithAsposeSlides(ReportViewer reportViewer, Aspose.Slides.ReportingServices.OutputPresentationFormat format, string filename)
{
//تمكين ميزة التصدير إلى RPL
EnableRplRenderExtension(reportViewer);
//إنشاء ملف لعرضنا التقديمي
using (FileStream pptSteam = new FileStream(filename, FileMode.Create))
{
Aspose.Slides.ReportingServices.RplRenderer renderer = new Aspose.Slides.ReportingServices.RplRenderer();
//بدء عملية الرسم
//هنا نختار تصدير بتنسيق PPT وتوفير outputStream
renderer.StartRendering(format);
int page = 1;
//تكرار هذه الدورة عبر جميع صفحات التقرير
while (true)
{
using (MemoryStream rplStream = CreateRplStream(reportViewer, page))
{
//إذا كان rplStream فارغًا فنحن قد وصلنا إلى نهاية التقرير
if (rplStream.Length == 0)
break;
//إضافة صفحة التقرير كشريحة إلى الوثيقة
renderer.RenderPage(rplStream);
}
page++;
}
//استدعاء أسلوب الانتهاء لضخ عرضنا التقديمي الجديد إلى تيار الإخراج
renderer.FinishRendering(pptSteam);
}
}
/// <summary>
/// يمكّن امتداد رسم RPL.
/// كن حذرًا لأن هذه الطريقة تلحق الضرر بالحالة الداخلية لنسخة كائن ReportViewer
/// وليس هناك ضمان أن هذه الطريقة ستعمل مع الإصدارات المستقبلية من ReportViewer
/// </summary>
/// <param name="reportViewer">عارض التقرير.</param>
public static void EnableRplRenderExtension(ReportViewer reportViewer)
{
object service = null;
if (reportViewer.ProductVersion.StartsWith("11"))
service = reportViewer.LocalReport.GetType().GetField("m_processingHost", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(reportViewer.LocalReport);
else
service = reportViewer.LocalReport.GetType().GetField("m_previewService", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(reportViewer.LocalReport);
var extensions = service
.GetType()
.GetMethod("ListRenderingExtensions")
.Invoke(service, null);
IList RenderingExtensions = (IList)extensions;
bool rplExportEnabled = false;
foreach (var extension in RenderingExtensions)
{
var name = extension
.GetType()
.GetProperty("Name")
.GetValue(extension, null)
.ToString();
if (name == "RPL")
{
extension
.GetType()
.GetField("m_isExposedExternally",
BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(extension, true);
rplExportEnabled = true;
break;
}
}
if (!rplExportEnabled)
throw new Exception("لا يمكن تمكين تصدير RPL. يرجى التأكد من أنك تستخدم ReportViewer 2010 أو ReportViewer 2012.");
}
/// <summary>
/// يرسم صفحة معينة إلى RPL
/// </summary>
/// <param name="reportViewer">عارض التقرير.</param>
/// <param name="page">الصفحة.</param>
static MemoryStream CreateRplStream(ReportViewer reportViewer, int page)
{
Warning[] warnings;
var stream = new MemoryStream();
reportViewer.LocalReport.Render("RPL",
String.Format(
@"<DeviceInfo>
<StartPage>{0}</StartPage>
<EndPage>{0}</EndPage>
<SecondaryStreams>Embedded</SecondaryStreams>
</DeviceInfo>", page),
(CreateStreamCallback)delegate { return stream; },
out warnings);
return stream;
}
}
}
الاستخدام من نوافذ النماذج
قد ترغب في إضافة أزرار تصدير إلى TollStripPanel الخاص بـ ReportViewer عن طريق إضافة هذا الكود إلى مُنشئ الـ Form:
ToolStrip toolStrip = (ToolStrip) reportViewer.Controls.Find("toolStrip1", true)[0];
ToolStripItem exportButton = toolStrip.Items.Add("تصدير إلى Pptx");
exportButton.Click += new EventHandler((s,e) =>
{
SlidesExportHelper.RenderWithAsposeSlides(this.reportViewer,
OutputPresentationFormat.Pptx,
"SalesReport.pptx");
});
exportButton = toolStrip.Items.Add("تصدير إلى Ppt");
exportButton.Click += new EventHandler((s,e)=>
{
SlidesExportHelper.RenderWithAsposeSlides(this.reportViewer,
OutputPresentationFormat.Ppt,
"SalesReport.ppt");
});
- يمكن تنزيل مشروع العينة من هذا الرابط
- يمكن تنزيل مشروع نموذج الويب من هذا الرابط