net core 怎么 将在线网页转为文档、pdf、图片。 或者其他技术能实现也可以。
要将在线网页转换为文档、PDF 或图片,可以使用多种技术和工具。在 .NET Core 中,有几种常用的方法可以实现这些功能:
以下是每种方法的详细说明和示例代码:
PuppeteerSharp 是 Puppeteer 的 .NET 封装,它是一个无头浏览器工具,能够用于网页截图和生成 PDF。
安装 NuGet 包:
dotnet add package PuppeteerSharp
示例代码:
using PuppeteerSharp; using System.IO; using System.Threading.Tasks; public class Program { public static async Task Main(string[] args) { await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision); var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true }); var page = await browser.NewPageAsync(); await page.GoToAsync("https://example.com"); // 保存为 PDF await page.PdfAsync("example.pdf"); // 保存为图片 await page.ScreenshotAsync("example.png"); await browser.CloseAsync(); } }
wkhtmltopdf 是一个开源命令行工具,可以将 HTML 转换为 PDF。
安装 wkhtmltopdf: 根据你的操作系统下载并安装 wkhtmltopdf。
使用 DinkToPdf 库:
dotnet add package DinkToPdf
using DinkToPdf; using DinkToPdf.Contracts; using System.IO; public class Program { public static void Main(string[] args) { var converter = new SynchronizedConverter(new PdfTools()); var doc = new HtmlToPdfDocument() { GlobalSettings = { ColorMode = ColorMode.Color, Orientation = Orientation.Portrait, PaperSize = PaperKind.A4, }, Objects = { new ObjectSettings() { Page = "https://example.com", }, } }; byte[] pdf = converter.Convert(doc); File.WriteAllBytes("example.pdf", pdf); } }
Selenium WebDriver 是一个用于自动化浏览器的工具,通常用于测试,但也可以用于生成 PDF 和截图。
dotnet add package Selenium.WebDriver dotnet add package Selenium.WebDriver.ChromeDriver
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System.IO; public class Program { public static void Main(string[] args) { var options = new ChromeOptions(); options.AddArgument("--headless"); options.AddArgument("--disable-gpu"); using (var driver = new ChromeDriver(options)) { driver.Navigate().GoToUrl("https://example.com"); // 保存截图 Screenshot screenshot = ((ITakesScreenshot)driver).GetScreenshot(); screenshot.SaveAsFile("example.png", ScreenshotImageFormat.Png); // 保存PDF (需要设置Chrome PDF打印选项) // TODO: 使用Chrome DevTools协议实现PDF生成 } } }
jsreport 是一个基于 JavaScript 的报告生成工具,可以与 .NET 集成。
安装 jsreport.Local NuGet 包:
dotnet add package jsreport.Local
using jsreport.Local; using jsreport.Types; using System.IO; using System.Threading.Tasks; public class Program { public static async Task Main(string[] args) { var rs = new LocalReporting() .RunInDirectory(Path.Combine(Directory.GetCurrentDirectory(), "jsreport")) .Configure(cfg => cfg.HttpPort(5488)) .AsWebServer() .Create(); await rs.StartAsync(); var report = await rs.RenderAsync(new RenderRequest { Template = new Template { Content = "<h1>Hello, jsreport!</h1>", Engine = Engine.None, Recipe = Recipe.ChromePdf } }); using (var fs = new FileStream("example.pdf", FileMode.Create)) { report.Content.CopyTo(fs); } await rs.KillAsync(); } }
上述方法展示了如何在 .NET Core 中将网页转换为 PDF 或图片。根据具体需求和技术栈,选择合适的工具。PuppeteerSharp 和 DinkToPdf 是比较常用的方案,前者功能强大但需要下载 Chromium,后者相对简单并且只需要 wkhtmltopdf 工具。Selenium 更适合需要模拟复杂用户交互的场景,而 jsreport 则是一个全面的报告生成解决方案。