明白,你希望在 代码层面将 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 lib | C# |
iText7 + Html2Pdf | 商业级库,稳定,可直接在代码中转换 | 商业项目需授权 | C# / Java |
OpenHTMLtoPDF | 免费,支持 CSS3 | 对复杂 JS 支持有限 | Java |
pdfkit + wkhtmltopdf | 简单易用 | 依赖外部程序 | Python |
WeasyPrint | CSS 渲染优秀 | 对 JS 支持弱 | Python |
🔧 注意事项
- 字体支持:中文或自定义字体需在 HTML 中引入或安装到系统。
- CSS 渲染:大部分库支持基本 CSS,但复杂 JS 渲染可能不生效。
- 表格和分页:iText7、WkHtmlToPdf 都支持分页和页眉页脚设置。
发表回复