You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.0中免费实现HTML转图片及邮件发链接的技术问询

Free HTML to Image Solutions for .NET Core 2.0 (No Paid Libraries)

Great question! Since you're working with .NET Core 2.0 and want to skip paid tools like NReco or EVO, here are two reliable open-source approaches I’ve used in similar scenarios:

1. Puppeteer Sharp (Chrome/Chromium-Based Rendering)

Puppeteer Sharp is a .NET port of Google's Puppeteer, which controls a headless Chrome/Chromium instance. It’s perfect for rendering complex HTML (including CSS, JavaScript, and dynamic content) accurately—no surprises with broken styling.

Step 1: Install the Compatible NuGet Package

Newer Puppeteer Sharp versions require .NET Core 3.0+, so stick to 2.x.x for .NET Core 2.0:

Install-Package PuppeteerSharp -Version 2.0.0

Step 2: HTML to Image Code Example

using PuppeteerSharp;
using System.IO;
using System.Threading.Tasks;

public async Task<string> ConvertHtmlToPng(string htmlContent)
{
    // Download Chromium once on app startup (skip if you've already deployed it)
    await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

    // Launch headless Chrome (add sandbox args for Linux deployment)
    using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
    {
        Headless = true,
        Args = new[] { "--no-sandbox", "--disable-setuid-sandbox" }
    });

    // Create a page and load your HTML content
    using var page = await browser.NewPageAsync();
    await page.SetContentAsync(htmlContent);

    // Optional: Set viewport size to control image dimensions
    await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 800 });

    // Define output path (ensure your web server has write permissions here)
    var outputDir = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "generated-images");
    Directory.CreateDirectory(outputDir);
    var outputPath = Path.Combine(outputDir, $"screenshot_{Guid.NewGuid()}.png");

    // Capture screenshot (use FullPage = true to capture long pages)
    await page.ScreenshotAsync(outputPath, new ScreenshotOptions
    {
        FullPage = true,
        Type = ScreenshotType.Png
    });

    // Return relative URL for email (adjust based on your static file setup)
    return $"/generated-images/{Path.GetFileName(outputPath)}";
}

Use MailKit (a robust open-source email library compatible with .NET Core 2.0):
First install the package:

Install-Package MailKit -Version 2.0.0

Then send the email with the image link:

using MailKit.Net.Smtp;
using MimeKit;

public void SendImageLinkEmail(string recipientEmail, string imageUrl)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("Your App Name", "your-app-email@example.com"));
    message.To.Add(new MailboxAddress("", recipientEmail));
    message.Subject = "Your Converted HTML Image";

    message.Body = new TextPart("html")
    {
        Text = $"Hi there,<br><br>Here's your converted image: <a href=\"{imageUrl}\">View Image</a>"
    };

    using var client = new SmtpClient();
    client.Connect("smtp.example.com", 587, false);
    client.Authenticate("your-app-email@example.com", "your-email-password");
    client.Send(message);
    client.Disconnect(true);
}

2. WkHtmlToImage (Lightweight CLI-Based Tool)

WkHtmlToImage uses the WebKit engine to convert HTML to images via a command-line tool. It’s lighter than Puppeteer Sharp but works best for static HTML (less reliable with dynamic JS).

Step 1: Install the .NET Wrapper

Use the compatible wrapper for .NET Core 2.0:

Install-Package WkHtmlToImage.NetCore -Version 1.0.0

Step 2: Add Platform Binaries

Include the platform-specific wkhtmltoimage binary (.exe for Windows, wkhtmltoimage for Linux/macOS) in your project, and set its "Copy to Output Directory" property to "Copy if newer".

Step 3: HTML to Image Code Example

using WkHtmlToImage.NetCore;
using System.IO;

public string ConvertHtmlToJpg(string htmlContent)
{
    var converter = new HtmlToImageConverter();
    converter.Setting.PageWidth = 1200;
    converter.Setting.PageHeight = 800;
    converter.Setting.ImageQuality = 90; // Adjust JPG quality (0-100)

    // Convert HTML to JPG byte array
    byte[] imageBytes = converter.Convert(htmlContent);

    // Save to file
    var outputDir = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "generated-images");
    Directory.CreateDirectory(outputDir);
    var outputPath = Path.Combine(outputDir, $"converted_{Guid.NewGuid()}.jpg");
    File.WriteAllBytes(outputPath, imageBytes);

    // Return relative URL
    return $"/generated-images/{Path.GetFileName(outputPath)}";
}

Key Tips for .NET Core 2.0

  • Permissions: Make sure your web server process has write access to the directory where you save images.
  • Linux Deployment: For Puppeteer Sharp on Linux, install dependencies like libgdiplus, libx11-dev, and libasound2 to run Chromium.
  • Version Locking: Always verify NuGet package compatibility with .NET Core 2.0—older versions (2.x for Puppeteer Sharp, 1.x for WkHtmlToImage wrappers) are your safest bet.

Puppeteer Sharp is my go-to for complex HTML, while WkHtmlToImage is great for simple, fast conversions. Pick whichever fits your use case!

内容的提问来源于stack exchange,提问作者N P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:27:38