结合Crystal Reports和WebAPI,可能吗?



我有一个.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"。

虽然我的参考列表中有:

  • CrystalDecisions.CrystalReports.Engine
  • 水晶决策.报告来源
  • 水晶决策.共享

但是,我不确定报告如何通过 API。有更多知识的人可以对此有所了解吗?

我现在正在创建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);
            }
        }
    },

最新更新