是否可以使用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
报告的结果呈现为字节数组即可。
答案 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