我需要从 HTML Canvas 生成 PDF,但该过程必须在作为 ASP.NET Core Web Api 的服务器端完成。
在服务器端,您可以HTML
将视图输出为,string
并且可以使用任何从 .pdf 生成 PDF 的库HTML
string
。要渲染视图,string
请参阅此链接在
获得后在 .NET Core 中将视图返回为字符串HTML
,您需要将其传递给库,请参阅此链接以在 .NET 中转换HTML
为string
将 HTML 转换为 PDF
1 创建一个 C# 扩展方法将视图渲染为字符串
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System.IO;
using System.Threading.Tasks;
namespace CC.Web.Helpers
{
public static class ControllerExtensions
{
public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
if (string.IsNullOrEmpty(viewName))
{
viewName = controller.ControllerContext.ActionDescriptor.ActionName;
}
controller.ViewData.Model = model;
using (var writer = new StringWriter())
{
IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
if (viewResult.Success == false)
{
return $"A view with the name {viewName} could not be found";
}
ViewContext viewContext = new ViewContext(
controller.ControllerContext,
viewResult.View,
controller.ViewData,
controller.TempData,
writer,
new HtmlHelperOptions()
);
await viewResult.View.RenderAsync(viewContext);
return writer.GetStringBuilder().ToString();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
2) 将视图渲染为字符串
viewHtml = await this.RenderViewAsync("Report", model);
Run Code Online (Sandbox Code Playgroud)
3) 使用 HTML 创建 PDF
Byte[] res = null;
using (MemoryStream ms = new MemoryStream())
{
var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(viewHtml, PdfSharp.PageSize.A4);
pdf.Save(ms);
res = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
小智 2
using IronPdf;
IronPdf.HtmlToPdf Renderer = new IronPdf.HtmlToPdf();
// Render an HTML document or snippet as a string
Renderer.RenderHtmlAsPdf("<h1>Hello World</h1>").SaveAs("html-string.pdf");
// Advanced:
// Set a "base url" or file path so that images, javascript and CSS can be loaded
var PDF = Renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>",@"C:\site\assets\");
PDF.SaveAs("html-with-assets.pdf");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17737 次 |
最近记录: |