使用ASP .NET Core呈现.rdlc报告

时间:2019-02-28 18:51:58

标签: asp.net-core reporting-services .net-core rdlc

是否可以使用ASP.NET Core呈现 if (getDialog() != null && getDialog().getWindow() != null) { getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } 报告?当前,这似乎只有在我针对.NET Framework而非.NET Core的情况下才有可能。

我不需要报告查看器,我只需要将.rdlc报告的结果呈现为字节数组即可。

5 个答案:

答案 0 :(得分:5)

如果要使用rdlc报告创建pdf / excel / word,建议您使用AspNetCore.Reporting库。这是开源的,是一个nuget包。您可以将其集成到.NET Core API或.NET Core Azure函数中。您可以生成一个字节数组,将其转换为基数为64的字符串,然后将其检索到客户端。有关评论链接的更多信息。

答案 1 :(得分:1)

您可以将rdlc渲染为字节数组。请参阅我前段时间询问的相关问题。 RDLC Local report viewer for ASP.NET Core and Angular(>2.0)

最终,对该线程进行了富有创意的讨论,最终形成了一个有角度的程序包(https://www.npmjs.com/package/ng2-pdfjs-viewer-披露;我是作者),该程序包在客户端具有可消耗的rdlc字节数组功能。当然,除了此程序包,您还可以选择其他JavaScript库来显示字节数组。

在angular上的简单用法就是这样。请注意,即使您使用纯js或其他框架,大多数代码也可以重用。

下面的代码演示

1。。使用aspnet核心操作方法(在服务器端)使用RDLC报告查看器控件分割字节数组,并使用http通过有线方式发送字节数组。 (代码在C#中)
2。。将响应的字节数组处理为blob对象(Js)
3 。将Blob对象输入ng2-pdfjs-viewer。
4 。 ng2-pdfjs-viewer内部使用Mozilla的PDFJS来完成在浏览器上显示PDF的壮举。
(仅供参考。我从ng2-pdfjs-viewer软件包中提供的示例中获取了代码。如果您使用的是其他库或纯JavaScript,请替换步骤3和4)

<!-- your.component.html -->
<button (click)="showPdf();">Show</button>
<div style="width: 800px; height: 400px">
  <ng2-pdfjs-viewer #pdfViewer></ng2-pdfjs-viewer>
</div>

export class MyComponent implements OnInit {
  @ViewChild('pdfViewer') pdfViewer
  ...

  private downloadFile(url: string): any {
    return this.http.get(url, { responseType: ResponseContentType.Blob }).map(
      (res) => {
        return new Blob([res.blob()], { type: "application/pdf" });
      });
  }

  public showPdf() {
    let url = "http://localhost/api/GetMyPdf";
    this.downloadFile(url).subscribe(
    (res) => {
        this.pdfViewer.pdfSrc = res; // <---- pdfSrc can be Blob or Uint8Array
        this.pdfViewer.refresh(); // Ask pdf viewer to load/reresh pdf
      }
    );
  }

[HttpGet]
[Route("MyReport")]
public IActionResult GetReport()
{
   var reportViewer = new ReportViewer {ProcessingMode = ProcessingMode.Local};
   reportViewer.LocalReport.ReportPath = "Reports/MyReport.rdlc";

   reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource1", reportObjectList1));
   reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource2", reportObjectList1));

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

   var bytes = reportViewer.LocalReport.Render("application/pdf", null, out mimeType, out encoding, out extension, out streamids, out warnings);

   return File(bytes, "application/pdf")
}

答案 2 :(得分:1)

当前使用.NET核心(不含完整的.NET Framework)呈现客户端RDLC报告的唯一方法是使用付费的Syncfusion解决方案。我已经测试了试用版,并且运行良好。也可以使用ASP .NET Core(没有任何第三方工具)呈现服务器托管的RDL报告-不理想,但是因为我必须将许多RDLC报告迁移到RDL – Muaddib878 2分钟前编辑

答案 3 :(得分:0)

使用.rdlc作为字节数组,您无法在.NET Core中呈现.rdlc报告。

答案 4 :(得分:0)

呈现RDLC报告依赖于WinForms和WebForms,当前仅在.NET Framework中受支持。希望微软将在.NET Core或.NET 5上提供一个(精简的)版本(仅为初学者提供报告),但到目前为止还没有任何消息。

作为替代方案,您可以寻求一个解决方案,其中将报告呈现作为针对.NET Framework的单独ASP.NET 2应用程序运行,而其余应用程序可以针对.NET Core 3或更高版本。这样,您可以使用适当的数据调用报告端点,并返回呈现的报告。

这就是我所做的,创建了一种微服务架构,多个.Net Core 3.1应用程序可以将XML RDLC报告定义和数据发布到运行在net48上的端点上,该端点使用{{ 1}}类,以将报告呈现为所需的格式,并将其作为字节数组返回。

LocalReport