如何在没有服务器或者UI的情况下从嵌入式报表定义生成PDF?

时间:2020-03-06 14:46:15  来源:igfitidea点击:

一个独立的可执行文件是否有可能在不显示ReportViewer控件的情况下生成报告并将其输出为PDF(或者从报告查看器获得的其他导出选项之一)?

报告定义应嵌入在可执行文件中,并且不应使用Reporting Services Web服务。

解决方案

我们不必显示控件本身。

ReportViewer rv = new ReportViewer();
rv.LocalReport.ReportPath = "templatepath";
// or use file from resource with rv.LocalReport.ReportEmbeddedResource

// add parameters, datasource, etc.

Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;

byte[] bytes;
bytes = rv.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);

// save byte[] to file with FileStream or something else

但是,它只能呈现PDF和XLS(因为ReportViewer控件无法像Reportig Service一样导出到Word和其他控件)。

我忘了提到上面的代码是C#,使用.NET Framework和ReportViewer控件。查看GotReportViewer以获得快速入门。

实际上,我们根本不需要ReportViewer,可以直接实例化并使用LocalReport:

LocalReport report = new LocalReport();
report.ReportPath = "templatepath";
// or use file from resource with report.ReportEmbeddedResource

// add parameters, datasource, etc.

Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string filenameExtension;

byte[] bytes;
bytes =report.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);

// save byte[] to file with FileStream or something else

我们可以将带参数的.rdlc报告直接传递给pdf吗?我有两个下拉列表,可用来提取报告。自动导出为pdf时,我无法使用这些参数。这是我得到的错误:Microsoft.ReportingServices.ReportProcessing.ReportProcessingException:未指定运行报告所需的一个或者多个参数。

当我使用reportviewer时,下拉列表有效,但我想跳过此步骤。如果没有任何参数,我也可以直接将数据转为pdf。我的下拉列表称为ddlyear和ddlmonth。