使用 IRON SUITE

为 .NET 开发人员提供的 C# 中的 HTML 到 PDF 转换(终极指南)

简介

在当今以网络为主导的世界中,将HTML内容转换为PDF文档(便携文档格式)是许多应用程序的关键功能。 无论是生成报告、发票还是归档网页内容的PDF文件,HTML到PDF的转换简化了工作流程,并确保高质量PDF的一致格式。 像IronPDF这样的库为开发者提供了一种处理这种转换的方便途径,支持动态内容,HTML表单,以及CSSJavaScript的精确渲染。

对于.NET开发人员来说,使用正确的HTML到PDF转换器影响效率、代码简洁性和PDF生成质量。 现代库允许开发人员直接将HTML字符串、整个网页或HTML文件转换为渲染的PDF文档,用几行代码实现动态文档、自定义标题和网页内容的可打印版本。

您将学习什么

在本指南中,您将学习如何在多个库中将HTML转换为C#中的PDF,并探索其PDF转换能力,包括操控PDF文档、HTML表单、自定义边距和安全PDF。 我们将在本文中涉及的主题有:

  1. 为什么要比较HTML到PDF的工具?
  2. IronPDF:HTML到PDF的转换
  3. Aspose:HTML到PDF的转换
  4. iText 9:HTML到PDF的转换
  5. wkhtmltopdf:HTML到PDF的转换
  6. PuppeteerSharp:HTML到PDF的转换
  7. 结论:为什么选择IronPDF?

到最后,您将了解为什么IronPDF作为开发者友好且高效的HTML到PDF转换器脱颖而出。 务必查看我们的其他比较指南,在那里我们深入比较IronPDF与,Aspose.PDFiText 9wkhtmltopdfPuppeteerSharp,以便找出最适合您项目的,并了解IronPDF为何屡次获胜。

为什么要比较HTML到PDF的工具?

选择合适的HTML到PDF转换工具对于确保您的应用程序满足性能、质量和成本要求至关重要。 有许多可用选项,每个都提供不同的PDF转换能力,详尽的比较有助于做出明智的决定。 以下是需要考虑的关键评估标准:

  • 集成复杂性:库如何轻松与现有的.NET项目集成,例如使用NuGet包管理器进行简单安装和API集成选项卡设置。
  • 代码简洁性:书写和维护源代码的简便程度,包括最小代码示例,像是几行代码就可以转换HTML字符串或整个网页为生成的PDF文档。
  • 渲染准确性:渲染引擎准确处理HTML代码、JavaScript执行、Print CSS、HTML表单和其他动态内容的能力,同时生成高质量的PDF。
  • 大规模性能:PDF转换器在重负荷下从多个HTML页面或动态内容生成PDF文件时的性能。
  • 许可和成本效益:定价模型,如商业许可,以及是否适合您项目的预算。

通过评估这些因素,开发人员可以选择适合技术需求和财务限制的工具,无论是在Visual Studio中处理.NET Core还是.NET Framework项目。

IronPDF:HTML到PDF转换

C#中的HTML到PDF转换:.NET开发者(终极指南):图1

IronPDF是一个专为开发人员设计的全功能.NET库。 它提供现成的方法来转换HTML字符串、本地文件和实时URL为PDF,设置极其简单。其基于Chrome的渲染引擎确保高精度,包括对CSS和JavaScript的支持。 IronPDF是商业的,但提供强大的支持和易于理解的API。

HTML字符串到PDF

使用IronPDF将字符串转为PDF很简单。 此方法非常适合动态内容生成或小型HTML片段。

Example:

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
        pdf.SaveAs("output.pdf");
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
        pdf.SaveAs("output.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

生成的PDF文档

C#中的HTML到PDF转换:.NET开发者(终极指南):图2

解释:

  1. ChromePdfRendererChromePdfRenderer类是IronPDF中用于从HTML到PDF转换的主要工具。 它预先配置好以处理大多数用例,设置极简。
  2. RenderHtmlAsPdf该方法以HTML字符串为输入并生成PDF文档。
  3. SaveAs生成的PDF保存到指定路径(output.pdf)。

本地HTML文件到PDF

对于需要将本地HTML文件(包含外部资源如CSS或JavaScript)转换的应用程序,IronPDF非常简单。

Example:

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("template.html");
        pdf.SaveAs("report.pdf");
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlFileAsPdf("template.html");
        pdf.SaveAs("report.pdf");
    }
}
Imports IronPdf
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()
		Dim pdf As PdfDocument = renderer.RenderHtmlFileAsPdf("template.html")
		pdf.SaveAs("report.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

输入HTML文件

C#中的HTML到PDF转换:.NET开发者(终极指南):图3

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图4

解释:

  • RenderHtmlFileAsPdf:获取本地HTML文件并转为PDF。
  • 自动处理链接资源,如外部CSS和JavaScript文件。

URL到PDF

IronPDF在转换URL的网站内容时尤其强大,包括使用JavaScript的页面。

Example:

using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000); // Wait up to 3 seconds for JS to load

        PdfDocument pdf = renderer.RenderUrlAsPdf("https://apple.com");
        pdf.SaveAs("url-to-pdf.pdf");
    }
}
using IronPdf;
class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.EnableJavaScript = true;
        renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
        renderer.RenderingOptions.WaitFor.RenderDelay(3000); // Wait up to 3 seconds for JS to load

        PdfDocument pdf = renderer.RenderUrlAsPdf("https://apple.com");
        pdf.SaveAs("url-to-pdf.pdf");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图5

解释:

  • RenderUrlAsPdf:获取URL内容,包括JavaScript渲染的元素,并将其转换为PDF。

判决/适用时间

IronPDF适合需要简单API集成、最小代码并支持操控PDF文档、创建动态文档、HTML表单、自定义页眉和网页内容可打印版本的开发人员。 理想用于在Visual Studio中处理.NET Core或.NET Framework项目。

Aspose:HTML到PDF转换

C#中的HTML到PDF转换:.NET开发者(终极指南):图6

Aspose.PDF是另一个强大的PDF操作库,支持HTML到PDF的转换。 我们来看Aspose如何处理每种转换场景:

HTML字符串到PDF

Aspose在转换HTML字符串时相比IronPDF需要更多设置。

Example:

using Aspose.Html;
using Aspose.Html.Saving;

Document doc = new Document();
Page page = doc.getPages().Add();
HtmlFragment htmlFragment = new HtmlFragment("<h1>HTML String</h1>");
page.getParagraphs().Add(htmlFragment);
doc.Save("HTMLStringUsingDOM.pdf");
using Aspose.Html;
using Aspose.Html.Saving;

Document doc = new Document();
Page page = doc.getPages().Add();
HtmlFragment htmlFragment = new HtmlFragment("<h1>HTML String</h1>");
page.getParagraphs().Add(htmlFragment);
doc.Save("HTMLStringUsingDOM.pdf");
Imports Aspose.Html
Imports Aspose.Html.Saving

Private doc As New Document()
Private page As Page = doc.getPages().Add()
Private htmlFragment As New HtmlFragment("<h1>HTML String</h1>")
page.getParagraphs().Add(htmlFragment)
doc.Save("HTMLStringUsingDOM.pdf")
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图7

解释:

  • Document doc:新建一个文档以保存转换后的HTML字符串。
  • Page page:此行向我们创建的空文档添加新页面。
  • HtmlFragment htmlFragment:这是我们正在转换的HTML字符串。
  • page.getParagraphs().Add(htmlFragment):将HTML加入到文档中。
  • doc.Save:将含HTML内容的文档保存为PDF文档。

本地HTML文件到PDF

Aspose也处理将本地HTML文件转为PDF,但比IronPDF需要更多配置。

Example:

using Aspose.Html;
using Aspose.Html.Converters;
using Aspose.Html.Saving;

var document = new HTMLDocument("document.html");
var options = new PdfSaveOptions();
Converter.ConvertHTML(document, options, "output.pdf");
using Aspose.Html;
using Aspose.Html.Converters;
using Aspose.Html.Saving;

var document = new HTMLDocument("document.html");
var options = new PdfSaveOptions();
Converter.ConvertHTML(document, options, "output.pdf");
Imports Aspose.Html
Imports Aspose.Html.Converters
Imports Aspose.Html.Saving

Private document = New HTMLDocument("document.html")
Private options = New PdfSaveOptions()
Converter.ConvertHTML(document, options, "output.pdf")
$vbLabelText   $csharpLabel

输入HTML:

C#中的HTML到PDF转换:.NET开发者(终极指南):图8

Output:

C#中的HTML到PDF转换:.NET开发者(终极指南):图9

解释:

  • var document = new HTMLDocument("document.html"):加载HTML文件。
  • var options:创建一个新的PdfSaveOptions对象。
  • Converter.ConvertHTML():将HTML转换为PDF。

URL到PDF

Aspose为URL提供类似功能,但需要额外设置。

Example:

using System.IO;
using System;
using System.Net.Http;
using Aspose.Pdf;

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://www.apple.com");
response.EnsureSuccessStatusCode();
string responseFromServer = await response.Content.ReadAsStringAsync();
MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseFromServer));
HtmlLoadOptions options = new HtmlLoadOptions("https://www.apple.com");
Document pdfDocument = new Document(stream, options);
pdfDocument.Save("WebPageToPDF_out.pdf");
using System.IO;
using System;
using System.Net.Http;
using Aspose.Pdf;

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("https://www.apple.com");
response.EnsureSuccessStatusCode();
string responseFromServer = await response.Content.ReadAsStringAsync();
MemoryStream stream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(responseFromServer));
HtmlLoadOptions options = new HtmlLoadOptions("https://www.apple.com");
Document pdfDocument = new Document(stream, options);
pdfDocument.Save("WebPageToPDF_out.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图10

解释:

  • dataDir变量保存生成的PDF将被保存的目录。
  • 创建WebRequest以访问Wikipedia主页URL,并使用默认凭据请求。
  • GetResponse()方法发送请求并检索响应为HttpWebResponse。
  • 从响应中获取流,并使用StreamReader将整个页面的HTML内容读入responseFromServer字符串。
  • responseFromServer的HTML内容被转换为字节数组,然后载入MemoryStream
  • 使用HtmlLoadOptions指定相对链接的基URL和其他设置。
  • 从包括HTML的内存流中创建Aspose.Pdf.Document,文档保存为指定目录的PDF。

判决/适用时间

Aspose.PDF最适合需要高级PDF操作和转换的企业级项目。 它功能强大,但不如快速HTML到PDF任务那般简化。

iText 9:HTML到PDF转换

C#中的HTML到PDF转换:.NET开发者(终极指南):图11

iText 9是iText PDF库的最新迭代,提供增强的功能在.NET应用程序中生成和操控PDF文档。 它引入了更简化和可扩展的API,提高性能,并更好地支持现代PDF标准。

HTML字符串到PDF

这是一个如何从HTML字符串转换为PDF文档的基本示例,使用iText 9。

Example:

using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputFile = "SimpleHtmlToPdf.pdf";

        using (var pdfStream = new FileStream(outputFile, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, pdfStream);
        }

        System.Console.WriteLine("PDF generated: " + outputFile);
    }
}
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<h1>Hello World</h1><p>This is a simple PDF generated from HTML.</p>";
        string outputFile = "SimpleHtmlToPdf.pdf";

        using (var pdfStream = new FileStream(outputFile, FileMode.Create))
        {
            HtmlConverter.ConvertToPdf(html, pdfStream);
        }

        System.Console.WriteLine("PDF generated: " + outputFile);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图12

本地HTML文件到PDF

iText 9可以使用HtmlConverter.ConvertToPdf类将HTML文件类型转换为PDF。

Example:

using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string htmlFile = "document.html";
        string outputPdf = "html-file-to-pdf.pdf";

        // Read HTML content from file
        string htmlContent = File.ReadAllText(htmlFile);

        // Convert HTML string to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        System.Console.WriteLine("PDF generated: " + outputPdf);
    }
}
using iText.Html2pdf;
using System.IO;

class Program
{
    static void Main()
    {
        string htmlFile = "document.html";
        string outputPdf = "html-file-to-pdf.pdf";

        // Read HTML content from file
        string htmlContent = File.ReadAllText(htmlFile);

        // Convert HTML string to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        System.Console.WriteLine("PDF generated: " + outputPdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图13

解释:

  • HtmlConverter:直接将HTML文件转换为PDF。

URL到PDF

iText7还支持从URL转换内容。

Example:

using iText.Html2pdf;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string url = "https://apple.com";
        string outputPdf = "url-to-pdf.pdf";

        using var httpClient = new HttpClient();
        // Fetch the HTML content from the URL
        string htmlContent = await httpClient.GetStringAsync(url);

        // Convert HTML content to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        Console.WriteLine("PDF generated: " + outputPdf);
    }
}
using iText.Html2pdf;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        string url = "https://apple.com";
        string outputPdf = "url-to-pdf.pdf";

        using var httpClient = new HttpClient();
        // Fetch the HTML content from the URL
        string htmlContent = await httpClient.GetStringAsync(url);

        // Convert HTML content to PDF
        HtmlConverter.ConvertToPdf(htmlContent, new FileStream(outputPdf, FileMode.Create));

        Console.WriteLine("PDF generated: " + outputPdf);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图14

解释:

  • HttpClient.GetStringAsync(url):从URL下载实际的HTML内容。
  • HtmlConverter.ConvertToPdf(htmlContent, …):将获取的HTML字符串转换为渲染的PDF。

判决/适用时间

iText 9适合需要一个强大、企业级PDF创建、操控和HTML到PDF转换解决方案的开发人员。 它在需要对生成PDF进行精确控制、与现有iText工作流程集成或需要高级PDF功能如数字签名和表单时很好。 然而,对于简单的HTML到PDF任务,iText 9比简化的库如IronPDF更重、更复杂。

wkhtmltopdf:HTML到PDF转换

C#中的HTML到PDF转换:.NET开发者(终极指南):图15

归档与维护状态

需要注意的是,wkhtmltopdf不再积极维护。 其GitHub存储库于2023年1月正式归档并标记为只读,意味着没有新的更新、bug修复或安全补丁被应用。

对开发者的影响:虽然wkhtmltopdf对非常基本的用例仍然有效,但其未维护状态和过时的渲染引擎使其成为一个风险选择——尤其是对生产环境或处理动态或外部HTML内容的应用程序。

wkhtmltopdf是一个使用Webkit渲染将HTML文件转换为PDF的命令行工具。 以下是它如何处理不同场景的工作原理:

HTML字符串到PDF

wkhtmltopdf需要通过先将HTML字符串写入文件进行转换。

Example:

using System;
using System.IO;
using System.Diagnostics;
class Program
{
    static void Main(string[] args)
    {
        // HTML string to be converted to PDF
        string html = "<html><body><h1>Hello, World!</h1></body></html>";
        // Write HTML string to temporary file
        string tempHtmlFile = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempHtmlFile, html);
        // Set output PDF path
        string outputPdfFile = Path.Combine(Path.GetTempPath(), "html-string-to-pdf.pdf");
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{tempHtmlFile}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        // Clean up the temporary HTML file
        File.Delete(tempHtmlFile);
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
using System;
using System.IO;
using System.Diagnostics;
class Program
{
    static void Main(string[] args)
    {
        // HTML string to be converted to PDF
        string html = "<html><body><h1>Hello, World!</h1></body></html>";
        // Write HTML string to temporary file
        string tempHtmlFile = Path.Combine(Path.GetTempPath(), "temp.html");
        File.WriteAllText(tempHtmlFile, html);
        // Set output PDF path
        string outputPdfFile = Path.Combine(Path.GetTempPath(), "html-string-to-pdf.pdf");
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{tempHtmlFile}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        // Clean up the temporary HTML file
        File.Delete(tempHtmlFile);
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
Imports System
Imports System.IO
Imports System.Diagnostics
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' HTML string to be converted to PDF
		Dim html As String = "<html><body><h1>Hello, World!</h1></body></html>"
		' Write HTML string to temporary file
		Dim tempHtmlFile As String = Path.Combine(Path.GetTempPath(), "temp.html")
		File.WriteAllText(tempHtmlFile, html)
		' Set output PDF path
		Dim outputPdfFile As String = Path.Combine(Path.GetTempPath(), "html-string-to-pdf.pdf")
		' Execute wkhtmltopdf command
		Dim process As New Process()
		process.StartInfo.FileName = "wkhtmltopdf"
		process.StartInfo.Arguments = $"""{tempHtmlFile}"" ""{outputPdfFile}"""
		process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
		process.Start()
		process.WaitForExit()
		' Clean up the temporary HTML file
		File.Delete(tempHtmlFile)
		Console.WriteLine($"PDF saved to: {outputPdfFile}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Output

C# 中的 HTML 到 PDF 为 .NET 开发者(终极指南):图 16

解释:

  • wkhtmltopdf需要一个输入文件,因此我们首先将HTML字符串写入临时文件(temp.html)。
  • 然后我们使用Process类执行wkhtmltopdf命令,传递临时HTML文件的文件路径和所需输出PDF路径为参数。
  • 转换后,我们删除临时HTML文件进行清理。

本地HTML文件到PDF

对于使用wkhtmltopdf将本地HTML文件转换为PDF,您可以直接指向HTML文件的文件路径。

Example:

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // Path to the local HTML file
        string htmlFilePath = @"C:\path\to\your\document.html";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\html-file-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{htmlFilePath}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // Path to the local HTML file
        string htmlFilePath = @"C:\path\to\your\document.html";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\html-file-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{htmlFilePath}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图17

解释:

  • 此示例简单地提供了本地HTML文件(template.html)的路径和PDF的输出路径。
  • wkhtmltopdf直接处理本地文件,使得命令简单明了。

URL到PDF

wkhtmltopdf将URL转换为PDF很简单。 只需将URL直接传递给命令。

Example:

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // URL to be converted to PDF
        string url = "https://apple.com";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\url-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{url}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        // URL to be converted to PDF
        string url = "https://apple.com";
        // Path for the output PDF file
        string outputPdfFile = @"C:\path\to\output\url-to-pdf.pdf";
        // Execute wkhtmltopdf command
        Process process = new Process();
        process.StartInfo.FileName = "wkhtmltopdf";
        process.StartInfo.Arguments = $"\"{url}\" \"{outputPdfFile}\"";
        process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
        process.Start();
        process.WaitForExit();
        Console.WriteLine($"PDF saved to: {outputPdfFile}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图18

解释:

  • 在此示例中,wkhtmltopdf直接接受URL作为输入。
  • URL 作为参数传递给 wkhtmltopdf,输出保存为 PDF 到指定路径。

PuppeteerSharp:HTML到PDF转换

C#中的HTML到PDF转换:.NET开发者(终极指南):图19

PuppeteerSharp是谷歌Puppeteer的一个.NET封装,提供对无头Chrome/Chromium的控制。 它擅长渲染JavaScript密集的、动态的页面,但需要下载和管理一个Chromium实例,这增加了开销。 它在Apache 2.0下开源。

HTML字符串到PDF

Puppeteer设计用来渲染完整页面,因此转换HTML字符串需要将其写入文件或直接在浏览器中渲染。

Example:

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

class Program
{
    static async Task Main(string[] args)
    {
       // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync();
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();
        string htmlContent = "<h1>Hello, World!</h1><p>This is a PDF generated from HTML string.</p>";
        await page.SetContentAsync(htmlContent);
        // Save the page as a PDF
        await page.PdfAsync("html-string-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
       // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync();
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();
        string htmlContent = "<h1>Hello, World!</h1><p>This is a PDF generated from HTML string.</p>";
        await page.SetContentAsync(htmlContent);
        // Save the page as a PDF
        await page.PdfAsync("html-string-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图20

解释:

  • Puppeteer.LaunchAsync:启动新的无头模式的Chromium实例。
  • page.SetContentAsync:将HTML字符串加载到浏览器页面中。
  • page.PdfAsync:将加载的HTML转换为PDF并保存到文件中。

本地HTML文件到PDF

使用PuppeteerSharp将本地HTML文件转换为PDF时,您可以将该文件加载到无头浏览器中并生成PDF。

Example:

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

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Load the local HTML file
        await page.GoToAsync("file:///path/to/your/template.html");

        // Save the page as a PDF
        await page.PdfAsync("html-file-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Load the local HTML file
        await page.GoToAsync("file:///path/to/your/template.html");

        // Save the page as a PDF
        await page.PdfAsync("html-file-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
Imports PuppeteerSharp
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Download the browser if necessary
		Await (New BrowserFetcher()).DownloadAsync(BrowserFetcher.DefaultRevision)
		Dim browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {.Headless = True})
		Dim page = Await browser.NewPageAsync()

		' Load the local HTML file
		Await page.GoToAsync("file:///path/to/your/template.html")

		' Save the page as a PDF
		Await page.PdfAsync("html-file-to-pdf.pdf")
		Await browser.CloseAsync()
	End Function
End Class
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图21

解释:

  • page.GoToAsync:加载本地HTML文件(确保使用正确的[file://]()路径)。
  • page.PdfAsync:将本地HTML文件的内容转换为PDF。

URL到PDF

将URL转换为PDF是PuppeteerSharp的核心功能之一,因为它可以处理复杂的JavaScript页面。

Example:

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

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Navigate to the URL
        await page.GoToAsync("https://example.com");

        // Save the page as a PDF
        await page.PdfAsync("url-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
using PuppeteerSharp;
using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // Download the browser if necessary
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
        var page = await browser.NewPageAsync();

        // Navigate to the URL
        await page.GoToAsync("https://example.com");

        // Save the page as a PDF
        await page.PdfAsync("url-to-pdf.pdf");
        await browser.CloseAsync();
    }
}
Imports PuppeteerSharp
Imports System
Imports System.Threading.Tasks

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Download the browser if necessary
		Await (New BrowserFetcher()).DownloadAsync(BrowserFetcher.DefaultRevision)
		Dim browser = Await Puppeteer.LaunchAsync(New LaunchOptions With {.Headless = True})
		Dim page = Await browser.NewPageAsync()

		' Navigate to the URL
		Await page.GoToAsync("https://example.com")

		' Save the page as a PDF
		Await page.PdfAsync("url-to-pdf.pdf")
		Await browser.CloseAsync()
	End Function
End Class
$vbLabelText   $csharpLabel

Output

C#中的HTML到PDF转换:.NET开发者(终极指南):图22

解释:

  • page.GoToAsync:导航到指定的URL。
  • page.PdfAsync:将URL上的网页转换为PDF并保存。

判决/适用时间

当您需要像素级渲染现代的、JavaScript密集的web应用时,PuppeteerSharp是理想选择。 它比IronPDF更复杂,但在处理动态web内容方面表现出色。

为什么选择 IronPDF?

IronPDF因其易于使用、灵活性以及与.NET应用程序的无缝集成而脱颖而出。 它实现简单,支持HTML、CSS和JavaScript渲染,不需要额外的设置或外部依赖。 除了HTML到PDF转换外,IronPDF还提供广泛的功能可从各种文件类型创建PDF文档编辑和添加到现有PDF文档、加水印、PDF文件安全等等! 要查看更多该库的实际应用,请务必查看操作手册,展示其每项功能的工作情况。

结论

在C#中将HTML转换为PDF文件时,有多种强大的工具可用,每一种都提供独特的功能和能力。 IronPDFAsposeiText 9wkhtmltopdfPuppeteerSharp都提供了将HTML内容转变为专业级PDF文档的强大解决方案。 然而,选择适合您项目的正确工具取决于集成的简便性、对动态内容的支持、性能和灵活性等因素。

工具HTML 字符串到 PDFHTML 文件到 PDFURL 转 PDF注意事项
IronPDF 的标志
IronPDF
使用RenderHtmlAsPdf可以轻松处理 HTML 字符串。易于使用,并可无缝集成到 .NET 应用程序中。使用RenderHtmlFileAsPdf ,自动处理链接资源(CSS、JS)。使用RenderUrlAsPdf ,支持 JavaScript 密集型页面和动态内容。与 .NET 完全集成,是 .NET 开发人员的理想之选。支持 HTML 字符串、文件和 URL。
Aspose 的标志
Aspose
需要更多设置。它使用Document对象中的HtmlFragment来转换 HTML 字符串。需要HtmlDocumentPdfSaveOptions才能进行本地 HTML 文件转换。比 IronPDF 需要更多配置。需要使用WebRequest进行额外设置以获取内容,然后再使用HtmlLoadOptions进行转换。它功能强大,可处理各种文档,但设置过程可能较为复杂。适合处理更复杂的PDF文件。
iText 的标志
iText7
使用HtmlConverter.ConvertToPdf将 HTML 字符串转换为 PDF。使用HtmlConverter.ConvertToPdf将本地 HTML 文件转换为 PDF。与本地文件处理类似,使用HtmlConverter.ConvertToPdf非常适合需要对 PDF 进行更多控制(而不仅仅是 HTML 转 PDF)的开发人员。
wkhtmltopdf 的标志
wkhtmltopdf
首先将HTML字符串写入文件进行转换。然后使用命令行工具生成PDF文件。通过指定文件路径,直接将本地 HTML 文件转换为 PDF 文件。通过将 URL 传递给命令行工具,直接将 URL 转换为 PDF。主要是一个命令行工具,可能需要额外的步骤才能集成到.NET中。最适合简单的转换。
PuppeteerSharp 的标志
傀儡师夏普
使用page.SetContentAsync加载 HTML 字符串,然后使用page.PdfAsync生成 PDF。通过page.GoToAsync加载本地 HTML 文件,然后将其转换为 PDF。加载 URL 并使用page.GoToAsyncpage.PdfAsync将其转换为 PDF。最适合动态页面,尤其是包含大量 JavaScript 的内容。需要下载并启动 Chromium 浏览器。
  • IronPDF 以其简单性、与 .NET 的直接集成以及处理 复杂 HTML 的能力(包括 JavaScript 渲染的页面)而脱颖而出。 对于那些寻找易于使用且设置简便的解决方案的开发人员来说,它是完美的选择。

  • Aspose 提供丰富的 PDF 操作功能,但其 HTML 到 PDF 的转换功能需要更多的配置,特别是在处理本地文件和外部资源时。

  • iText 9 为那些希望创建 PDF 文档的人提供了坚实的基础,尽管可能需要额外的编码来将 HTML 转换为 PDF,尤其是对于动态内容。 对于需要自定义 PDF 操作的项目来说,这是一个不错的选择。

  • wkhtmltopdf 适用于基础 HTML 到 PDF 的转换,它具有命令行界面,但缺乏完整 .NET 库的集成和灵活性。

  • PuppeteerSharp 利用无头 Chrome,是呈现复杂动态网页并将其转换为 PDF 的首选工具,尤其是在处理 JavaScript 密集的内容时。

对于大多数寻找一体化、简单明了解决方案的 .NET 开发者来说,IronPDF 值得今天就来尝试,以亲身体验其强大功能。 从生成新的 PDF 文档到编辑现有的 PDF,亲自探索 IronPDF 的全部功能。 只需安装 IronPDF,并使用免费试用版,亲自体验。 看看它今天如何提升你的 PDF 工作流程。

最终,合适的工具取决于你具体的需求,但通过这里讨论的选项,你拥有足够的装备来找到适合你项目的完美解决方案。

请注意:Aspose、iText、wkhtmltopdf 和 PuppeteerSharp 是其各自所有者的注册商标。 本网站与Aspose、iText、wkhtmltopdf或Puppeteer无关联关系,不受其认可或赞助。 比较是基于写作时的公开信息,仅提供用于信息目的。)}] 这些比较仅供参考,并基于撰写时公开可用的信息。