使用 C# 将 HTML 文档转换为 PDF 文档

博客类别:图像处理PDF.NET

2026/04/08

在 C# 中将 HTML 页面转换为 PDF 文档是一项常见任务,通常用于根据 HTML 模板创建发票、报告、合同和其他商业文档。此外,在 C# 中将 HTML 页面转换为 PDF 文档对于从动态 Web 内容创建静态、可移植且可直接打印的文档也至关重要。

将 HTML 页面转换为 PDF 文档的过程包括以下步骤:

HTML5 标准规范(https://html.spec.whatwg.org/print.pdf)包含 1553 页。

CSS2 标准规范 (https://www.w3.org/TR/CSS22/css2.pdf) 包含 426 页。

JavaScript 标准规范(https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf)包含 835 页。

以上提供了将HTML转换为PDF的步骤以及有关HTML5、CSS2和JavaScript规范的信息,旨在说明,通常情况下,如果从头开始实现,将HTML转换为PDF是一项非常复杂的任务。

同时,现代网络浏览器已经实现了这项复杂的任务,它们可以完美地渲染 HTML 页面,并将渲染后的 HTML 页面保存为 PDF 文件。因此,一个合理的问题出现了:是否可以在 C# 应用程序中使用网络浏览器将 HTML 页面转换为 PDF 文档?

在本文中,我们将探讨如何使用 Chromium 在 C# 应用程序中将任意复杂程度的 HTML 页面转换为 PDF 文档,完全免费且质量最高。

Chromium 是一个开源的网页浏览器项目,它主要被用作大多数现代网页浏览器的基础,包括 Google Chrome、Microsoft Edge、Opera 等。它的设计以速度、安全性和稳定性为核心,并汇集了来自 Google、Microsoft 和其他公司开发者的诸多贡献。


使用 Chrome 命令行在 C# 中将 HTML 页面转换为 PDF 文档

将 HTML 页面转换为 PDF 文档的最简单方法是从命令行运行以下 Chrome 命令:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu —run-all-compositor-stages-before-draw --no-margins --printBackground=true --no-pdf-header-footer --print-to-pdf="D:\result.pdf" "https://www.vintasoft.com/index.html"

以下是 Chrome 命令行中使用的参数的简要说明:

上述命令可以从 Windows/Linux/macOS 命令行或 C# 代码中运行。

以下 C# 代码演示了如何使用 Chrome 在 .NET 控制台应用程序中将 HTML 页面转换为 PDF 文档:
using System.Diagnostics;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
            string sourceUrl = "https://www.vintasoft.com/index.html";
            string resultPdfFilePath = @"D:\result.pdf";
            string chromeArgsTemplate =
                "--headless --no-pdf-header-footer --no-margins --disable-gpu --run-all-compositor-stages-before-draw --printBackground=true --print-to-pdf=\"{0}\" {1}";
            
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName = chromePath,
                Arguments = string.Format(chromeArgsTemplate, resultPdfFilePath, sourceUrl),
                UseShellExecute = false,
                CreateNoWindow = false
            };
            using (Process process = Process.Start(startInfo))
            {
                process.WaitForExit();
            }
            
            Console.WriteLine("HTML page is converted to the PDF document.");
        }
    }
}


如果计算机上安装了 Chrome 浏览器并且您知道"chrome.exe"文件的路径,则可以使用此转换方法。

生成的 .NET 应用程序体积很小,因为它不包含任何其他库,并且完全依赖于 Chrome 浏览器。


使用 CefSharp.OffScreen NuGet 包在 C# 中将 HTML 页面转换为 PDF 文档。

CefSharp.OffScreen NuGet 包包含 CefSharp 库的编译版本,允许开发人员在后台运行完整的 Chromium 浏览器实例,而无需显示用户界面。

如果您想在 .NET Framework 应用程序中使用 CefSharp.OffScreen 库,只需将 CefSharp.OffScreen NuGet 包的引用添加到 .NET Framework 应用程序即可。

如果您想在 .NET Core 应用程序中使用 CefSharp.OffScreen 库,只需将 CefSharp.OffScreen.NETCore NuGet 包的引用添加到 .NET Core 应用程序即可。

以下是使用 CefSharp.OffScreen 库将 HTML 页面转换为 PDF 文档的 .NET 控制台应用程序的 C# 代码:
using CefSharp;
using CefSharp.OffScreen;
using System;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string sourceUrl = "https://www.vintasoft.com/index.html";
            string resultPdfFilePath = @"D:\result.pdf";
            Task task = ConvertHtmlToPdfUsingCefSharpOffScreen(sourceUrl, resultPdfFilePath);
            task.Wait();
            Console.WriteLine("HTML page is converted to the PDF document.");
            Console.ReadKey();
        }

        static async Task ConvertHtmlToPdfUsingCefSharpOffScreen(string url, string pdfPath)
        {
            // if CEF is not initialized
            if (Cef.IsInitialized == null || Cef.IsInitialized == false)
            {
                // create CEF settings
                CefSettings settings = new CefSettings();
                // initialize CEF
                Cef.Initialize(settings);
            }

            // create Chromium web browser
            using (ChromiumWebBrowser browser = new ChromiumWebBrowser(url))
            {
                // wait while page will be loaded
                await browser.WaitForInitialLoadAsync();

                // create PDF print settings
                PdfPrintSettings printSettings = new PdfPrintSettings
                {
                    MarginType = CefPdfPrintMarginType.None,
                    PrintBackground = true,
                    Landscape = false,
                    Scale = 1.0,
                    PreferCssPageSize = true,
                    DisplayHeaderFooter = false
                };

                // print web page to a PDF file
                await browser.PrintToPdfAsync(pdfPath, printSettings);
            }
        }
    }
}


此转换方法与 Chrome 浏览器无关,因此无需自行编译 CefSharp,因为 CefSharp.OffScreen NuGet 包的创建者已经完成了这项工作。

生成的 .NET 应用程序完全独立,体积较大(略超过 300 MB),因为它包含 CefSharp 库文件。


使用 CefSharp 库在 C# 中将 HTML 页面转换为 PDF 文档。

CefSharp 是一个开源项目,它为 Chromium Embedded Framework (CEF) 提供了一个 .NET 封装。CefSharp 允许开发人员将功能齐全的基于 Chromium 的 Web 浏览器直接嵌入到 C# 或 VB.NET 桌面应用程序中。

CefSharp 代码库位于 GitHub 上:https://github.com/cefsharp/cefsharp

该存储库包含 15 个项目,包括一个示例控制台应用程序、一个示例 WinForms 应用程序和一个示例 WPF 应用程序。

尝试运行示例 WPF 应用程序(项目"CefSharp.Wpf.Example.netcore"),您将看到一个页面导航类似于 Chrome 的 WPF 应用程序。该 WPF 应用程序包含链接导航、CSS 样式和 JavaScript 代码--感觉就像 Chrome 一样。在应用程序的主菜单中,您可以选择菜单"测试 => 将当前选项卡打印到 PDF",并将渲染的 HTML 页面保存为 PDF 文件。


此转换方法与 Chrome 浏览器无关,但您需要手动从源代码编译 CefSharp,而 Visual Studio 中编译 CefSharp 项目时会自动完成此操作。

生成的 .NET 应用程序("CefSharp.Wpf.Example.netcore"项目)是完全独立的,并且体积较大(略超过 400 MB),因为它包含 CefSharp 库文件。


使用 Vintasoft_Imaging_ 处理 PDF 文档。NET_SDK

VintaSoft 选择不在其 SDK 中包含将 HTML 页面转换为 PDF 文档的功能,因为这项任务非常复杂,而且现代 Web 浏览器已经实现了此功能。

同时,VintaSoft Imaging .NET SDKVintaSoft PDF .NET Plug-in 允许您在 Windows、Linux 和 macOS 中创建、查看、验证、打印、注释、编辑、保护、签名、优化、压缩、转换和保存 PDF 和 PDF/A 文档。

因此,可以使用 VintaSoft SDK 来处理创建的 PDF 文档,具体如下:

有关使用 VintaSoft Imaging .NET SDK + VintaSoft PDF .NET Plug-in 处理 PDF 文档功能的详细信息,请访问:https://www.vintasoft.com/zh/vspdf-dotnet-index.html