Пример #1
0
        public async Task <bool> HandleSuccessfulReqeustAsync(HttpContext context, object body, Type type, string tplPath)
        {
            var    contentType = "";
            string filename    = DateTime.Now.ToString("yyyyMMddHHmmss");

            byte[] result = null;
            switch (context.Request.Headers["Magicodes-Type"])
            {
            case HttpContentMediaType.XLSXHttpContentMediaType:
                filename += ".xlsx";
                var dt = ToDataTable(body?.ToString());
                contentType = HttpContentMediaType.XLSXHttpContentMediaType;
                var exporter = new ExcelExporter();
                result = await exporter.ExportAsByteArray(dt, type);

                break;

            case HttpContentMediaType.PDFHttpContentMediaType:
                filename   += ".pdf";
                contentType = HttpContentMediaType.PDFHttpContentMediaType;
                IExportFileByTemplate pdfexporter = new PdfExporter();
                var tpl = await File.ReadAllTextAsync(tplPath);

                var obj = JsonConvert.DeserializeObject(body.ToString(), type);
                result = await pdfexporter.ExportBytesByTemplate(obj, tpl, type);

                break;

            case HttpContentMediaType.HTMLHttpContentMediaType:
                filename   += ".html";
                contentType = HttpContentMediaType.HTMLHttpContentMediaType;
                IExportFileByTemplate htmlexporter = new HtmlExporter();
                result = await htmlexporter.ExportBytesByTemplate(JsonConvert.DeserializeObject(body.ToString(), type), await File.ReadAllTextAsync(tplPath), type);

                break;

            case HttpContentMediaType.DOCXHttpContentMediaType:
                filename   += ".docx";
                contentType = HttpContentMediaType.DOCXHttpContentMediaType;
                IExportFileByTemplate docxexporter = new WordExporter();
                result = await docxexporter.ExportBytesByTemplate(JsonConvert.DeserializeObject(body.ToString(), type), await File.ReadAllTextAsync(tplPath), type);

                break;
            }
            if (contentType != "")
            {
                context.Response.Headers.Add("Content-Disposition", $"attachment;filename={filename}");
                context.Response.ContentType = contentType;
                if (result != null)
                {
                    await context.Response.Body.WriteAsync(result, 0, result.Length);
                }
            }
            else
            {
                return(false);
            }
            return(true);
        }
Пример #2
0
        public async Task <bool> HandleSuccessfulReqeustAsync(HttpContext context, object body, IExportData exportData)
        {
            var contentType = "";

            var    fileStr  = !exportData.FileName.IsNullOrWhiteSpace() ? exportData.FileName + "_" : "";
            string filename = fileStr + DateTime.Now.ToString("yyyyMMddHHmmss");

            byte[] result = null;
            switch (context.Request.Headers["exportType"])
            {
            case ExportType.Excel:
                filename += ".xlsx";
                var dt = ToDataTable(body?.ToString());
                contentType = HttpContentMediaType.XLSXHttpContentMediaType;
                var exporter = new ExcelExporter();
                result = await exporter.ExportAsByteArray(dt, exportData.Type);

                break;

            case ExportType.PDF:
                filename   += ".pdf";
                contentType = HttpContentMediaType.PDFHttpContentMediaType;
                IExportFileByTemplate pdfexporter = new PdfExporter();
                var tpl = File.ReadAllText(exportData.TemplatePath);
                var obj = JsonConvert.DeserializeObject(body.ToString(), exportData.Type);
                result = await pdfexporter.ExportBytesByTemplate(obj, tpl, exportData.Type);

                break;

            case ExportType.Word:
                filename   += ".docx";
                contentType = HttpContentMediaType.DOCXHttpContentMediaType;
                IExportFileByTemplate docxexporter = new WordExporter();
                result = await docxexporter.ExportBytesByTemplate(JsonConvert.DeserializeObject(body.ToString(), exportData.Type), File.ReadAllText(exportData.TemplatePath), exportData.Type);

                break;
            }
            if (contentType != "")
            {
                //必须清空原有响应返回内容,否则会抛异常 System.InvalidOperationException: Response Content-Length mismatch: too few bytes written
                context.Response.Clear();
                context.Response.Headers.Add("Content-Disposition", $"attachment;filename={HttpUtility.UrlEncode(filename)}");
                context.Response.ContentType = contentType;
                if (result != null)
                {
                    await context.Response.Body.WriteAsync(result, 0, result.Length);
                }
            }
            else
            {
                return(false);
            }
            return(true);
        }
Пример #3
0
        public async Task ExportPdfBytesByTemplate_Test()
        {
            var tplPath  = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "ExportTemplates", "tpl1.cshtml");
            var tpl      = File.ReadAllText(tplPath);
            var exporter = new PdfExporter();
            var filePath = Path.Combine(Directory.GetCurrentDirectory(), nameof(ExportPdfBytesByTemplate_Test) + ".pdf");

            if (File.Exists(filePath))
            {
                File.Delete(filePath);
            }
            //此处使用默认模板导出
            var result = await exporter.ExportBytesByTemplate(
                GenFu.GenFu.ListOf <ExportTestData>(), tpl);

            result.ShouldNotBeNull();
            using var file = File.OpenWrite(filePath);
            file.Write(result, 0, result.Length);
            File.Exists(filePath).ShouldBeTrue();
        }
Пример #4
0
        public async Task HandleSuccessfulReqeustAsync(HttpContext context, object body, Type type, string tplPath)
        {
            var    contentType = "";
            string filename    = DateTime.Now.ToString("yyyyMMddHHmmss");

            byte[] result = null;
            switch (context.Request.ContentType)
            {
            case HttpContentMediaType.XLSXHttpContentMediaType:
                filename += ".xlsx";
                var dt = ToDataTable(body?.ToString());
                contentType = HttpContentMediaType.XLSXHttpContentMediaType;
                var exporter = new ExcelExporter();
                result = await exporter.ExportAsByteArray(dt, type);

                break;

            case HttpContentMediaType.PDFHttpContentMediaType:
                filename   += ".pdf";
                contentType = HttpContentMediaType.PDFHttpContentMediaType;
                IExportFileByTemplate pdfexporter = new PdfExporter();
                tplPath = Path.Combine(Directory.GetCurrentDirectory(), "ExportTemplates",
                                       "batchReceipt.cshtml");
                var tpl = File.ReadAllText(tplPath);
                var obj = JsonConvert.DeserializeObject(body.ToString(), type);
                result = await pdfexporter.ExportBytesByTemplate(obj, tpl, type);

                break;

            case HttpContentMediaType.HTMLHttpContentMediaType:
                filename   += ".html";
                contentType = HttpContentMediaType.HTMLHttpContentMediaType;
                IExportFileByTemplate htmlexporter = new HtmlExporter();
                result = await htmlexporter.ExportBytesByTemplate(JsonConvert.DeserializeObject(body.ToString(), type), File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "ExportTemplates",
                                                                                                                                                      "receipt.cshtml")), type);

                break;

            case HttpContentMediaType.DOCXHttpContentMediaType:
                filename += ".docx";
                IExportFileByTemplate docxexporter = new WordExporter();
                result = await docxexporter.ExportBytesByTemplate(JsonConvert.DeserializeObject(body.ToString(), type), File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(), "ExportTemplates",
                                                                                                                                                      "receipt.cshtml")), type);

                break;

            default:
                break;
            }

            #region  excel
            //var dt = ToDataTable(body?.ToString());
            ////Excel
            //IExporter exporter = new ExcelExporter();
            //var result = await exporter.ExportAsByteArray(dt, type);
            //context.Response.Headers.Add("Content-Disposition", "attachment;filename=test.xlsx");
            //context.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8";
            #endregion

            #region PDF
            //IExportFileByTemplate exporter = new PdfExporter();
            //var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "ExportTemplates",
            //    "batchReceipt.cshtml");
            //var tpl = File.ReadAllText(tplPath);
            //var obj = JsonConvert.DeserializeObject(body.ToString(), type);
            //var result = await exporter.ExportBytesByTemplate(obj, tpl, type);
            //context.Response.Headers.Add("Content-Disposition", "attachment;filename=test.pdf");
            //context.Response.ContentType = "application/pdf; charset=UTF-8";
            #endregion

            #region HTML
            //IExportFileByTemplate exporter = new HtmlExporter();
            //var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "ExportTemplates",
            //    "receipt.cshtml");
            //var tpl = File.ReadAllText(tplPath);
            //var obj = JsonConvert.DeserializeObject(body.ToString(), type);
            //var result = await exporter.ExportBytesByTemplate(obj, tpl, type);
            //context.Response.Headers.Add("Content-Disposition", "attachment;filename=test.html");
            //context.Response.ContentType = "text/html; charset=UTF-8";
            #endregion

            #region Word
            //IExportFileByTemplate exporter = new WordExporter();
            //var tplPath = Path.Combine(Directory.GetCurrentDirectory(), "ExportTemplates",
            //    "receipt.cshtml");
            //var tpl = File.ReadAllText(tplPath);
            //var obj = JsonConvert.DeserializeObject(body.ToString(), type);
            //var result = await exporter.ExportBytesByTemplate(obj, tpl, type);
            //context.Response.Headers.Add("Content-Disposition", "attachment;filename=test.docx");
            //context.Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

            #endregion

            context.Response.Headers.Add("Content-Disposition", $"attachment;filename={filename}");
            context.Response.ContentType = contentType;
            await context.Response.Body.WriteAsync(result, 0, result.Length);
        }