public async Task <IActionResult> Convert() { StringValues clientParam; StringValues keyParam; StringValues orientationParam; StringValues pageSizeParam; var hasClient = Request.Query.TryGetValue("client", out clientParam); var hasKey = Request.Query.TryGetValue("key", out keyParam); var hasOrientation = Request.Query.TryGetValue("orientation", out orientationParam); var hasPageSize = Request.Query.TryGetValue("pageSize", out pageSizeParam); var client = hasClient && clientParam.Count > 0 ? clientParam[0] : ""; var key = hasKey && keyParam.Count > 0 ? keyParam[0] : ""; var orientation = hasOrientation && orientationParam.Count > 0 ? orientationParam[0] : "portrait"; var pageSize = hasPageSize && pageSizeParam.Count > 0 ? pageSizeParam[0] : "A4"; if (!_clientKeys.ContainsKey(client) || _clientKeys[client] != key) { return(new NotFoundResult()); } var formData = HttpContext.Request.Form; var files = formData.Files; var docFile = files.Where(f => f.FileName == "doc.html").FirstOrDefault(); IActionResult response = null; if (docFile != null) { var tempFolder = $"{System.IO.Path.GetTempPath()}{Guid.NewGuid()}"; Directory.CreateDirectory(tempFolder); foreach (var file in files) { if (file.FileName != "doc.html") { await System.IO.File.WriteAllBytesAsync($"{tempFolder}/{file.FileName}", ReadAllBytes(file.OpenReadStream())); } } try { using (var htmlSource = docFile.OpenReadStream()) using (var pdfDest = new ByteArrayOutputStream()) { var writer = new PdfWriter(pdfDest); var pdfDoc = new PdfDocument(writer); pdfDoc.SetTagged(); PageSize ps = PageSize.A4; if (pageSize == "A3") { ps = PageSize.A3; } if (orientation == "landscape") { ps = ps.Rotate(); } pdfDoc.SetDefaultPageSize(ps); var converterProperties = new ConverterProperties(); var fp = new DefaultFontProvider(); fp.AddDirectory(tempFolder); converterProperties.SetFontProvider(fp); converterProperties.SetImmediateFlush(true); converterProperties.SetBaseUri(new Uri(tempFolder).AbsoluteUri); HtmlConverter.ConvertToPdf(htmlSource, pdfDoc, converterProperties); var bytes = pdfDest.ToArray(); response = new FileContentResult(bytes, "application/pdf"); } } catch (Exception ex) { response = StatusCode(500, new { error = ex.Message, stackTrace = ex.StackTrace }); } Directory.Delete(tempFolder, true); } else { response = StatusCode((int)HttpStatusCode.BadRequest, new { error = "No doc file provided" }); } return(response); }