Ssrs 2008 SSRS2008:LocalReport导出为HTML/fragment
我需要将本地RDL报告导出为HTML,最好是HTML片段。在2005年,它没有得到官方的支持,但有一个。在SSRS2008中,他们似乎放弃了这种支持(当使用反射枚举时,支持的扩展中没有HTML扩展),而是使用二进制格式,我怀疑有人会乐意解析这种格式。实际上,它似乎根本不是关于HTML的 现在,有没有一种使用SSRS2008本地报告呈现HTML的方法Ssrs 2008 SSRS2008:LocalReport导出为HTML/fragment,ssrs-2008,Ssrs 2008,我需要将本地RDL报告导出为HTML,最好是HTML片段。在2005年,它没有得到官方的支持,但有一个。在SSRS2008中,他们似乎放弃了这种支持(当使用反射枚举时,支持的扩展中没有HTML扩展),而是使用二进制格式,我怀疑有人会乐意解析这种格式。实际上,它似乎根本不是关于HTML的 现在,有没有一种使用SSRS2008本地报告呈现HTML的方法 请注意,我使用的是VS2008,但使用的是从VS2010 Beta 2 reportviewer安装的报表程序集。正在查找相同的内容。我想我们可以尝
请注意,我使用的是VS2008,但使用的是从VS2010 Beta 2 reportviewer安装的报表程序集。正在查找相同的内容。我想我们可以尝试通过反射来获取ReportViewer的渲染输出
我可能会玩一会儿,看看我能想出什么来。我找到了一种方法,但不是很好。 将报告导出到mhtml(由SSRS2008支持) 然后使用
System.Windows.Forms.WebBrowser
渲染mhtml。
在wb.DocumentText中,
属性将是完整的html页面
这不是很好,因为您需要一个文件(作为WebBrowser的url)。
而且,如果我在ASP.NET应用程序中使用WebBrowser,我需要在另一个线程中使用STA ApartmentState处理它。如果您可以获得mht,则可以使用提取它的内容 这里有一个nu get包(MIMER需要.NET Framework 3.5):
用法:
var Viewer = new Microsoft.Reporting.WebForms.ReportViewer();
EnableFormat(Viewer, "HTML4.0");
您可能也会发现这很有趣:
我没有找到答案,所以我只是在ASP.NET MVC应用程序中使用ASP.NET报表查看器。技巧链接:您可以加载HTML,而不必在WebBrowser控件中加载文件。只是不是mht。
private static void EnableFormat(ReportViewer viewer, string formatName)
{
const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;
FieldInfo m_previewService = viewer.LocalReport.GetType().GetField
(
"m_previewService",
Flags
);
MethodInfo ListRenderingExtensions = m_previewService.FieldType.GetMethod
(
"ListRenderingExtensions",
Flags
);
object previewServiceInstance = m_previewService.GetValue(viewer.LocalReport);
IList extensions = ListRenderingExtensions.Invoke(previewServiceInstance, null) as IList;
PropertyInfo name = extensions[0].GetType().GetProperty("Name", Flags);
foreach (object extension in extensions)
{
if (string.Compare(name.GetValue(extension, null).ToString(), formatName, true) == 0)
{
FieldInfo m_isVisible = extension.GetType().GetField("m_isVisible", BindingFlags.NonPublic | BindingFlags.Instance);
FieldInfo m_isExposedExternally = extension.GetType().GetField("m_isExposedExternally", BindingFlags.NonPublic | BindingFlags.Instance);
m_isVisible.SetValue(extension, true);
m_isExposedExternally.SetValue(extension, true);
break;
}
}
}
var Viewer = new Microsoft.Reporting.WebForms.ReportViewer();
EnableFormat(Viewer, "HTML4.0");