參考:.Net Core 導出Html到PDF - 雲+社區 - 騰訊雲 (tencent.com)
將頁面生成pdf文件可以在后端將數據和Html拼接成頁面再利用插件生成pdf:
一、安裝包
注意:該插件在Linux下不可用,僅限於windows
二、使用方式
string htmlString = @"<!DOCTYPE html> <html> <head></head> <body> </body></html>"; HtmlToPdf Renderer = new HtmlToPdf(); //設置Pdf參數 Renderer.Options.PdfPageOrientation = PdfPageOrientation.Landscape;//設置頁面方式-橫向 PdfPageOrientation.Portrait 豎向 Renderer.Options.PdfPageSize = PdfPageSize.A4; Renderer.Options.MarginRight = 15; Renderer.Options.MarginLeft = 35; Renderer.Options.MarginTop = 25; //設置更多額參數可以去HtmlToPdfOptions里面選擇設置 var docHtml = Renderer.ConvertHtmlString(htmlString);//根據html內容導出PDF //保存到指定路勁中 //string webRootPath = @"D:\HtmlToPdf\"; //獲取項目運行絕對路徑 //var path = $"/ExportPDF/{DateTime.Now.ToString("yyyyMMdd")}/";//文件相對路徑 //var savepathHtml = $"{webRootPath}{path}{Guid.NewGuid().ToString()}-Html.pdf";//保存絕對路徑 //if (!Directory.Exists(Path.GetDirectoryName(webRootPath + path))) //{ // Directory.CreateDirectory(Path.GetDirectoryName(webRootPath + path)); //} //docHtml.Save(savepathHtml); //文件流形式 using MemoryStream ms = new MemoryStream(); docHtml.Save(ms);
三、接口中返回格式
要么是保存在服務器返回文件地址,要么以文件流形式發送到前端:
1:返回文件流
[HttpGet]
public async Task<IActionResult> GetPdf() { //上面生成的docHtml using MemoryStream ms = new MemoryStream(); docHtml.Save(ms); return File(ms.ToArray(), "application/octet-stream", $"{title}_{DateTime.Now.ToString("yyyy-MM-dd")}.pdf");//title為pdf文件名 }
2:返回byte[]
[HttpGet] public async Task<IActionResult> GetPdf() { byte[] buffer; //上面生成的docHtml using MemoryStream ms = new MemoryStream(); docHtml.Save(ms); buffer = ms.GetBuffer(); return OK(buffer); }