AspNetCore、C#、.Net生成Pdf
参考:.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);
}