明白,你希望在 代码层面将 HTML 转 PDF,而不是把网页截图生成图片。也就是说,PDF 内容要 可复制文本、支持链接和样式。下面我帮你整理常用方案(C#、Java、Python 都可参考),并附上示例。


1️⃣ C# 方案

方法一:使用 WkHtmlToPdf / DinkToPdf

DinkToPdf 是 C# 对 WkHtmlToPdf 的封装,支持 HTML -> PDF,保留 CSS、表格、文本。

using DinkToPdf;
using DinkToPdf.Contracts;

var converter = new SynchronizedConverter(new PdfTools());

var doc = new HtmlToPdfDocument()
{
    GlobalSettings = {
        PaperSize = PaperKind.A4,
        Orientation = Orientation.Portrait
    },
    Objects = {
        new ObjectSettings() {
            HtmlContent = "<h1>Hello World</h1><p>This is PDF content</p>",
            WebSettings = { DefaultEncoding = "utf-8" }
        }
    }
};

byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);

✅ 优点:渲染效果接近真实网页,支持 CSS、图片、表格。
⚠️ 注意:需要下载 WkHtmlToPdf 的 native library。


方法二:使用 iText7 / iTextSharp(更适合纯 HTML)

using iText.Html2pdf;
using System.IO;

string html = "<h1>Hello PDF</h1><p>Html to PDF test</p>";
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
    HtmlConverter.ConvertToPdf(html, fs);
}

✅ 优点:

  • 支持 CSS 样式、字体、文本复制
  • 不依赖外部程序
    ⚠️ 商业项目需购买 iText7 License

2️⃣ Java 方案

方法一:OpenHTMLtoPDF

import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
import java.io.FileOutputStream;

String html = "<h1>Hello PDF</h1><p>This is PDF content</p>";
try (FileOutputStream os = new FileOutputStream("output.pdf")) {
    PdfRendererBuilder builder = new PdfRendererBuilder();
    builder.withHtmlContent(html, null);
    builder.toStream(os);
    builder.run();
}

方法二:iText7 + pdfHTML

HtmlConverter.convertToPdf(new File("input.html"), new File("output.pdf"));


3️⃣ Python 方案

方法一:pdfkit + wkhtmltopdf

import pdfkit

html_content = "<h1>Hello PDF</h1><p>This is PDF content</p>"
pdfkit.from_string(html_content, "output.pdf")

  • 依赖 wkhtmltopdf 安装
  • 支持 CSS、表格、文字选择

方法二:WeasyPrint

from weasyprint import HTML

HTML(string="<h1>Hello PDF</h1><p>This is PDF content</p>").write_pdf("output.pdf")

✅ WeasyPrint 渲染效果好,支持复杂 CSS、@font-face


4️⃣ 总结对比

库/工具优点缺点语言
DinkToPdf / WkHtmlToPdf渲染接近浏览器,支持复杂 CSS需要 native libC#
iText7 + Html2Pdf商业级库,稳定,可直接在代码中转换商业项目需授权C# / Java
OpenHTMLtoPDF免费,支持 CSS3对复杂 JS 支持有限Java
pdfkit + wkhtmltopdf简单易用依赖外部程序Python
WeasyPrintCSS 渲染优秀对 JS 支持弱Python

🔧 注意事项

  1. 字体支持:中文或自定义字体需在 HTML 中引入或安装到系统。
  2. CSS 渲染:大部分库支持基本 CSS,但复杂 JS 渲染可能不生效。
  3. 表格和分页:iText7、WkHtmlToPdf 都支持分页和页眉页脚设置。