我有一个.NET WebAPI项目,我已经添加了一个rpt Report文件。如何添加Crystal Report WebViewer组件?
到目前为止我想出了什么:
public class ReportController: ApiController
{
[HttpGet]
public CrystalReportViewer GetReport()
{
CrystalReportViewer reportViewer = new CrystalReportViewer();
ReportDocument reportDocument = new ReportDocument();
reportDocument.Load(HttpContext.Current.Server.MapPath("CrystalReport1.rpt"));
reportViewer.ReportSource = reportDocument;
return reportViewer;
}
}
我在编译期间得到的错误是
找不到类型或命名空间名称“CrystalReportViewer”。
虽然我的参考清单中有:
但是,我不确定报告如何通过API。有更多知识的人可以对此有所了解吗?
答案 0 :(得分:0)
我现在正在创建PDF或XLSX作为流,将其复制到内存流中并将该内容作为base64编码的字符串发回。然后将base64作为数据URL加载到iframe中。
后端:
[HttpGet]
public AjaxAnswer<string> GetReport(...)
{
ReportDocument reportDocument = new ReportDocument();
...
Stream s = reportDocument.ExportToStream(ExportFormat.FileFormat);
MemoryStream ms = new MemoryStream();
s.CopyTo(ms);
return new AjaxAnswer() {
success = true,
data = Convert.ToBase64String(ms.ToArray()
};
}
前端:
form.submit({
...
success: function(form, operation) {
pnl.setLoading(false);
var pdfBase64 = Ext.decode(operation.response.responseText, true).data;
if(pdfBase64) {
if(!Ext.isIE && !Ext.isEdge && !btn.isXLS) {
document.querySelector(".iframe-report-pdf").src = "data:application/pdf;base64," + pdfBase64;
} else {
var type = (btn.isXLS?'application/xlsx':'application/pdf');
var filename = (btn.report || btn.text)+(btn.isXLS?'.xls':'.pdf');
Ext.Download(Ext.B64ToBlob(pdfBase64, type), filename, type);
}
}
},