Вот мой код, если нужно, выложу и свой html-код:
Код: Выделить всё
public async Task PdfProvider()
{
var htmlStream = new MemoryStream();
await HttpContext.Request.Body.CopyToAsync(htmlStream);
var htmlBytes = htmlStream.ToArray();
var resultHtml = Encoding.UTF8.GetString(htmlBytes);
var workStream = new MemoryStream();
try
{
using (var pdfWriter = new PdfWriter(workStream, new WriterProperties().SetFullCompressionMode(true)))
{
pdfWriter.SetCloseStream(false);
HtmlConverter.ConvertToPdf(resultHtml, pdfWriter);
}
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}
workStream.Position = 0;
return File(workStream, "application/pdf", "Document.pdf");
}
Код: Выделить всё
private async Task DownloadAsync()
{
await GetHtmlResult();
var fileName = System.IO.Path.GetFileNameWithoutExtension(FileName);
await _jsRuntime.InvokeVoidAsync("fileDownload", "application/pdf", Convert.ToBase64String(PdfContent), $"{fileName}_chat.pdf");
}
private async Task GetHtmlResult()
{
string resultHtml = "";
while (string.IsNullOrEmpty(resultHtml))
{
resultHtml = await _jsRuntime.InvokeAsync("getHtmlContent", PdfResultMarkup);
}
_httpClient.BaseAddress = new Uri(HostEnvironment.BaseAddress);
var htmlTemplate = await _httpClient.GetStringAsync(@"HtmlTemplates/html5Template.html");
var cssStyles = await _httpClient.GetStringAsync(@"css/pdf.css");
var htmlResult = htmlTemplate.Replace("@content", resultHtml).Replace("@cssstyle", cssStyles);
PdfContent = await _fileService.GetPdfAsync(Encoding.UTF8.GetBytes(htmlResult));
}
Код: Выделить всё
@cssstyle
Document
Chat
@content
Подробнее здесь: https://stackoverflow.com/questions/790 ... thing-else