概述:在这篇文章中,我将展示如何利用 JsReport 将 HTML 代码转换为 PDF,JsReport 是一个基于 JavaScript 的报告库,可以轻松集成到 .NET 项目中。
JsReport 支持利用动态数据和功能(如图形、表格和图像)从 HTML、CSS 和 JavaScript 模板创建自定义报告。
先决条件Visual Studio 2022包装:jsreport.AspNetCorejsreport.Binaryjsreport.Binary.Linuxjsreport.Local运用程序接口第一步是配置 program.cs 类:var builder = WebApplicat

在这篇文章中,我将展示如何利用 JsReport 将 HTML 代码转换为 PDF,JsReport 是一个基于 JavaScript 的报告库,可以轻松集成到 .NET 项目中。

JsReport 支持利用动态数据和功能(如图形、表格和图像)从 HTML、CSS 和 JavaScript 模板创建自定义报告。

nethtml方法在 NET 中应用 JsReport 将 HTML 转换为 PDF HTML

先决条件

Visual Studio 2022

包装:

jsreport.AspNetCorejsreport.Binaryjsreport.Binary.Linuxjsreport.Local运用程序接口

第一步是配置 program.cs 类:

var builder = WebApplication.CreateBuilder(args); builder.AddSerilog(builder.Configuration, "Sample JsReport"); Log.Information("Starting API"); builder.Services.AddRouting(options => options.LowercaseUrls = true); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.AddJsReport(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();

该扩展卖力将 JsReport 依赖项注入到办理方案中:AddJsReport()

public static class JsReportExtensions { public static WebApplicationBuilder AddJsReport(this WebApplicationBuilder builder) { var localReporting = new LocalReporting() .UseBinary(RuntimeInformation.IsOSPlatform(OSPlatform.Linux) ? jsreport.Binary.Linux.JsReportBinary.GetBinary() : jsreport.Binary.JsReportBinary.GetBinary()) .KillRunningJsReportProcesses() .Configure(cfg => { cfg.ReportTimeout = 60000; cfg.Chrome = new ChromeConfiguration { Timeout = 60000, Strategy = ChromeStrategy.ChromePool, NumberOfWorkers = 3 }; cfg.HttpPort = 3000; return cfg; }) .AsUtility() .Create(); builder.Services.AddJsReport(localReporting); return builder; } }

此代码利用 NuGet 包自动下载的 JsReport 二进制文件创建转换器确当地实例。

KillRunningJsReportProcesses()方法卖力终止/开释以前的 PDF 天生过程中的内存。
Configure()方法卖力 JsReport 的其他配置,在本例中,配置要在 Chrome 浏览器中处理的 PDF 天生。
AsUtility()method 表示我们将利用 JsReport 作为实用工具,而不存储模板或天生的报告。
Create()方法完成 JsReport 配置。

现在,我们可以利用 JsReport 进行转换。
为此,有必要在 Controller 中创建一个方法,该方法吸收 HTML 作为参数并返回 PDF 文件作为结果:

[ApiController][Route("[controller]")]public class ConverterHtml : ControllerBase{ private readonly IRenderService _render; public ConverterHtml(IRenderService render) { _render = render; } [HttpPost] public async Task<IActionResult> Convert([FromForm] string html) { var report = await _render.RenderAsync(new RenderRequest { Template = new Template { Recipe = Recipe.ChromePdf, Engine = Engine.JsRender, Content = html } }); return File(report.Content, "application/pdf", "file.pdf"); }}

该方法吸收一个 RenderRequest 工具,该工具包含有关模板和报表格式的信息。
在我们的例子中,模板是我们作为参数收到的 HTML。
末了,我们利用该方法将此内容作为 PDF 文件返回。
RenderAsync()File

测试

为了测试我们的方法,我们可以创建一个包含一些文本和图像的大略 HTML。
例如:

<html><head> <style> h1 { color: blue; } </style></head><body> <h1>Converting HTML to PDF with JsReport in .NET</h1> <p>This is a cool example of how to convert HTML to PDF using JsReport in .NET.</p> <img src="https://raw.githubusercontent.com/dotnet/brand/main/logo/text-only/Black/dotnet-logo-text_Black%402x.png" alt=".NET logo" width="323" height="121"></body></html>

然后,在调用 api/converterhtml 端点时将 HTML 作为参数通报,然后单击实行:

天生 PDF 文件的结果是什么:

利用 JsReport,在保持格式和图像的同时将 HTML 代码转换为 PDF 变得更加大略。
我们可以利用更繁芜的模板,并在报表中添加更多功能,例如页眉、页脚、页码等。