小能豆

net core 怎么 将在线网页转为文档、pdf、图片。 或者其他技术能实现也可以。

javascript

net core 怎么 将在线网页转为文档、pdf、图片。
或者其他技术能实现也可以。


阅读 52

收藏
2024-06-23

共1个答案

小能豆

要将在线网页转换为文档、PDF 或图片,可以使用多种技术和工具。在 .NET Core 中,有几种常用的方法可以实现这些功能:

  1. 使用 PuppeteerSharp
  2. 使用 wkhtmltopdf
  3. 使用 Selenium WebDriver
  4. 使用 jsreport

以下是每种方法的详细说明和示例代码:

1. 使用 PuppeteerSharp

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();
    }
}

2. 使用 wkhtmltopdf

wkhtmltopdf 是一个开源命令行工具,可以将 HTML 转换为 PDF。

安装 wkhtmltopdf:
根据你的操作系统下载并安装 wkhtmltopdf

使用 DinkToPdf 库:

安装 NuGet 包:

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);
    }
}

3. 使用 Selenium WebDriver

Selenium WebDriver 是一个用于自动化浏览器的工具,通常用于测试,但也可以用于生成 PDF 和截图。

安装 NuGet 包:

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生成
        }
    }
}

4. 使用 jsreport

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 则是一个全面的报告生成解决方案。

2024-06-23