跳至页脚内容
使用IRONPDF

使用 IronPDF 在 .NET 中将 HTML 转换为 PDF

IronPDF 是一款 .NET HTML 转 PDF 转换器,它使用 Chrome 的渲染引擎将 HTML 字符串、文件和网页转换为高质量的 PDF 文档,并支持精确的 CSS 渲染和 JavaScript 执行。

在 .NET 开发中,将 HTML 转换为 PDF 是一项复杂的挑战。 你需要一款能够处理现代 CSS 布局、正确执行 JavaScript 并生成高质量文档的 PDF 转换器——同时还要易于实现。 IronPDF通过基于 Chrome 的渲染来解决这些挑战,使您能够以浏览器质量的保真度转换 HTML 文件、字符串和网页。

本文探讨了如何在 .NET 应用程序中实现专业的 PDF 生成,从基本转换到高级功能,例如跨 Windows、Linux 和Azure 的数字签名和 PDF 操作。 您将学习如何使用异步操作来提高性能,以及如何使用自定义日志记录来进行调试。

IronPDF C# PDF 库主页横幅展示了其主要功能,包括 HTML 转 PDF、PDF 编辑功能、灵活的部署选项以及免费试用。

为什么选择 IronPDF 在 .NET 中将 HTML 转换为 PDF?

Chrome渲染在PDF生成方面有哪些优势?

IronPDF 的 Chrome 渲染引擎可提供卓越的渲染效果。 与使用过时的WebKit快照的库不同,IronPDF 使用了与 Google Chrome 相同的 Blink 技术。 您的 PDF 文件与 Chrome 打印预览中的显示效果完全一致——没有样式缺失或布局损坏。 了解Chrome 的渲染功能以及与竞争解决方案的比较。

IronPDF如何处理现代Web技术?

现代网络应用程序使用复杂的 CSS 和 JavaScript。 IronPDF 提供对 CSS3 的原生支持,包括 flexbox、网格系统、变换和动画。 引擎会在渲染之前处理 JavaScript,以确保动态生成的内容正确显示。 无论是转换文件还是渲染页面,IronPDF 都能捕捉到最终状态。 该库支持Bootstrap 布局响应式设计WebGL 内容

为什么 API 设计对开发者友好?

该库通过简洁明了的 API 设计,优先考虑开发者体验。 你只需使用熟悉的 HTML 和 CSS,IronPDF 就能处理复杂的 HTML 和 CSS。 ChromePdfRenderer 类提供智能默认值,并在需要时提供细粒度的控制。 与QuestPDFSyncfusion相比,IronPDF 提供了更优越的易用性。

功能概览仪表板显示了四项主要的 PDF 功能:创建 PDF、转换 PDF、编辑 PDF 以及签名和保护 PDF,每个类别下都有详细的功能列表。

如何在您的 .NET 8 项目中安装 IronPDF?

通过软件包管理器安装的最快方法是什么?

安装 IronPDF 只需几分钟。 在 Visual Studio 中使用程序包管理器控制台:

Install-Package IronPdf

包管理器控制台显示 IronPDF NuGet 包的安装过程,正在下载多个依赖项

此操作会下载软件包及其依赖项,并自动配置项目引用。 该软件包包含在运行时解析的平台特定二进制文件。对于更高级的场景,请探索Docker 部署远程容器

如何使用 .NET CLI 进行安装?

命令行安装:

dotnet add package IronPdf

这对于 VS Code、Rider 或自动化流水线来说效果很好。 请查阅文档以获取特定于平台的说明,包括F# 支持

那么,基于图形用户界面的安装方法呢?

Visual Studio 的 NuGet 包管理器提供了一个可搜索的界面。 右键单击您的项目,选择"管理 NuGet 程序包",搜索"IronPdf",然后安装。 了解企业部署的高级配置

安装IronPDF后如何配置?

添加命名空间:

using IronPdf;
using IronPdf.Rendering; // For rendering options
using IronPdf.Editing; // For PDF editing features
using IronPdf;
using IronPdf.Rendering; // For rendering options
using IronPdf.Editing; // For PDF editing features
Imports IronPdf
Imports IronPdf.Rendering ' For rendering options
Imports IronPdf.Editing ' For PDF editing features
$vbLabelText   $csharpLabel

激活您的生产许可证:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Optional: Configure global settings
IronPdf.Installation.TempFolderPath = @"C:\Temp\IronPdf";
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Optional: Configure global settings
IronPdf.Installation.TempFolderPath = @"C:\Temp\IronPdf";
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

' Optional: Configure global settings
IronPdf.Installation.TempFolderPath = "C:\Temp\IronPdf"
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
$vbLabelText   $csharpLabel

30 天免费试用期提供全部功能供测试。 有关配置选项,请参阅许可文档

如何使用 IronPDF 将 HTML 字符串转换为 PDF?

HTML字符串转换的基本方法是什么?

转换 HTML 字符串是最常见的用例。 首先使用RenderHtmlAsPdf进行基本转换:

using IronPdf;

// Create the renderer
var renderer = new ChromePdfRenderer();

// Configure options
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Convert HTML to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice #12345</h1><p>Total: $99.99</p>");

// Save the PDF
pdf.SaveAs("invoice.pdf");

// Get bytes for web response
byte[] pdfBytes = pdf.BinaryData;
using IronPdf;

// Create the renderer
var renderer = new ChromePdfRenderer();

// Configure options
renderer.RenderingOptions.MarginTop = 50;
renderer.RenderingOptions.MarginBottom = 50;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;

// Convert HTML to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice #12345</h1><p>Total: $99.99</p>");

// Save the PDF
pdf.SaveAs("invoice.pdf");

// Get bytes for web response
byte[] pdfBytes = pdf.BinaryData;
Imports IronPdf

' Create the renderer
Dim renderer As New ChromePdfRenderer()

' Configure options
renderer.RenderingOptions.MarginTop = 50
renderer.RenderingOptions.MarginBottom = 50
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20

' Convert HTML to PDF
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Invoice #12345</h1><p>Total: $99.99</p>")

' Save the PDF
pdf.SaveAs("invoice.pdf")

' Get bytes for web response
Dim pdfBytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

这将生成一个符合无障碍访问标准的、具有正确文本选择的 PDF 文件。 探索自定义页边距纸张尺寸选项

输出

PDF 查看器显示一张简单的发票,编号为 12345,总金额为 99.99 美元,缩放比例为 100%

如何使用 CSS 设置 PDF 样式?

直接在 HTML 中引入 CSS:

var styledHtml = @"
    <style>
        @import url('___PROTECTED_URL_73___

        body { 
            font-family: 'Roboto', Arial, sans-serif; 
            margin: 40px;
            line-height: 1.6;
        }
        .header { 
            color: #2563eb; 
            border-bottom: 2px solid #e5e7eb; 
            padding-bottom: 10px;
        }
        .amount { 
            font-size: 24px; 
            font-weight: bold; 
            color: #059669;
        }
    </style>
    <div class='header'>
        <h1>Professional Invoice</h1>
        <p>Invoice Date: " + DateTime.Now.ToString("MMMM dd, yyyy") + @"</p>
    </div>
    <p class='amount'>$1,234.56</p>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500); // Wait for fonts

var pdf = renderer.RenderHtmlAsPdf(styledHtml);
pdf.SaveAs("styled-invoice.pdf");
var styledHtml = @"
    <style>
        @import url('___PROTECTED_URL_73___

        body { 
            font-family: 'Roboto', Arial, sans-serif; 
            margin: 40px;
            line-height: 1.6;
        }
        .header { 
            color: #2563eb; 
            border-bottom: 2px solid #e5e7eb; 
            padding-bottom: 10px;
        }
        .amount { 
            font-size: 24px; 
            font-weight: bold; 
            color: #059669;
        }
    </style>
    <div class='header'>
        <h1>Professional Invoice</h1>
        <p>Invoice Date: " + DateTime.Now.ToString("MMMM dd, yyyy") + @"</p>
    </div>
    <p class='amount'>$1,234.56</p>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(500); // Wait for fonts

var pdf = renderer.RenderHtmlAsPdf(styledHtml);
pdf.SaveAs("styled-invoice.pdf");
Imports System
Imports IronPdf

Dim styledHtml As String = "
    <style>
        @import url('___PROTECTED_URL_73___

        body { 
            font-family: 'Roboto', Arial, sans-serif; 
            margin: 40px;
            line-height: 1.6;
        }
        .header { 
            color: #2563eb; 
            border-bottom: 2px solid #e5e7eb; 
            padding-bottom: 10px;
        }
        .amount { 
            font-size: 24px; 
            font-weight: bold; 
            color: #059669;
        }
    </style>
    <div class='header'>
        <h1>Professional Invoice</h1>
        <p>Invoice Date: " & DateTime.Now.ToString("MMMM dd, yyyy") & "</p>
    </div>
    <p class='amount'>$1,234.56</p>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(500) ' Wait for fonts

Dim pdf = renderer.RenderHtmlAsPdf(styledHtml)
pdf.SaveAs("styled-invoice.pdf")
$vbLabelText   $csharpLabel

CSS 的渲染效果与 Chrome 完全一致。 探索渲染选项网页字体

如何处理图片等外部资源?

外部资源需要基础路径:

var htmlWithImage = @"
    <html>
    <head>
        <link rel='stylesheet' href='styles.css' />
    </head>
    <body>
        <img src='logo.png' alt='Company Logo' />
        <h1>Document Title</h1>
    </body>
    </html>";

var renderer = new ChromePdfRenderer();

// Set base path for relative URLs
var pdf = renderer.RenderHtmlAsPdf(htmlWithImage, @"C:\assets\");

// Alternative: Use web resources
var webHtml = "<img src='/images/logo.png' />";
var pdfFromWeb = renderer.RenderHtmlAsPdf(webHtml, new Uri("___PROTECTED_URL_74___"));

pdf.SaveAs("document-with-assets.pdf");
var htmlWithImage = @"
    <html>
    <head>
        <link rel='stylesheet' href='styles.css' />
    </head>
    <body>
        <img src='logo.png' alt='Company Logo' />
        <h1>Document Title</h1>
    </body>
    </html>";

var renderer = new ChromePdfRenderer();

// Set base path for relative URLs
var pdf = renderer.RenderHtmlAsPdf(htmlWithImage, @"C:\assets\");

// Alternative: Use web resources
var webHtml = "<img src='/images/logo.png' />";
var pdfFromWeb = renderer.RenderHtmlAsPdf(webHtml, new Uri("___PROTECTED_URL_74___"));

pdf.SaveAs("document-with-assets.pdf");
Dim htmlWithImage As String = "
    <html>
    <head>
        <link rel='stylesheet' href='styles.css' />
    </head>
    <body>
        <img src='logo.png' alt='Company Logo' />
        <h1>Document Title</h1>
    </body>
    </html>"

Dim renderer As New ChromePdfRenderer()

' Set base path for relative URLs
Dim pdf = renderer.RenderHtmlAsPdf(htmlWithImage, "C:\assets\")

' Alternative: Use web resources
Dim webHtml As String = "<img src='/images/logo.png' />"
Dim pdfFromWeb = renderer.RenderHtmlAsPdf(webHtml, New Uri("___PROTECTED_URL_74___"))

pdf.SaveAs("document-with-assets.pdf")
$vbLabelText   $csharpLabel

了解如何管理资产Azure Blob 存储

输出

! PDF 查看器显示 IronPDF for .NET 徽标(白色背景),显示第 1 页(共 1 页),缩放比例为 100%。

如何将 HTML 文件和 URL 转换为 PDF?

如何转换本地HTML文件?

转换本地 HTML 文件使用RenderHtmlFileAsPdf

// Simple conversion
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("report-template.html");
pdf.SaveAs("report-output.pdf");

// Advanced conversion
var advancedRenderer = new ChromePdfRenderer();
advancedRenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
advancedRenderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Environment;
advancedRenderer.RenderingOptions.PrintHtmlBackgrounds = true;

var advancedPdf = advancedRenderer.RenderHtmlFileAsPdf("complex-report.html");
advancedPdf.MetaData.Title = "Monthly Sales Report";
advancedPdf.SaveAs("advanced-report.pdf");
// Simple conversion
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("report-template.html");
pdf.SaveAs("report-output.pdf");

// Advanced conversion
var advancedRenderer = new ChromePdfRenderer();
advancedRenderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
advancedRenderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Environment;
advancedRenderer.RenderingOptions.PrintHtmlBackgrounds = true;

var advancedPdf = advancedRenderer.RenderHtmlFileAsPdf("complex-report.html");
advancedPdf.MetaData.Title = "Monthly Sales Report";
advancedPdf.SaveAs("advanced-report.pdf");
' Simple conversion
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("report-template.html")
pdf.SaveAs("report-output.pdf")

' Advanced conversion
Dim advancedRenderer = New ChromePdfRenderer()
advancedRenderer.RenderingOptions.PaperSize = PdfPaperSize.A4
advancedRenderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Environment
advancedRenderer.RenderingOptions.PrintHtmlBackgrounds = True

Dim advancedPdf = advancedRenderer.RenderHtmlFileAsPdf("complex-report.html")
advancedPdf.MetaData.Title = "Monthly Sales Report"
advancedPdf.SaveAs("advanced-report.pdf")
$vbLabelText   $csharpLabel

该方法在内部处理文件读取和链接资源的处理。 对于 ZIP 文件,请参阅"从存档中获取 HTML"

如何转换在线网页?

使用RenderUrlAsPdf渲染网页:

// Basic URL conversion
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_75___");
pdf.SaveAs("website-snapshot.pdf");

// Advanced conversion with authentication
var secureRenderer = new ChromePdfRenderer();
secureRenderer.LoginCredentials = new ChromeHttpLoginCredentials
{
    Username = "user@example.com",
    Password = "secure-password"
};

secureRenderer.RenderingOptions.WaitFor.NetworkIdle(500);
var securePdf = secureRenderer.RenderUrlAsPdf("___PROTECTED_URL_76___");
securePdf.SaveAs("secure-dashboard.pdf");
// Basic URL conversion
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_75___");
pdf.SaveAs("website-snapshot.pdf");

// Advanced conversion with authentication
var secureRenderer = new ChromePdfRenderer();
secureRenderer.LoginCredentials = new ChromeHttpLoginCredentials
{
    Username = "user@example.com",
    Password = "secure-password"
};

secureRenderer.RenderingOptions.WaitFor.NetworkIdle(500);
var securePdf = secureRenderer.RenderUrlAsPdf("___PROTECTED_URL_76___");
securePdf.SaveAs("secure-dashboard.pdf");
' Basic URL conversion
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_75___")
pdf.SaveAs("website-snapshot.pdf")

' Advanced conversion with authentication
Dim secureRenderer As New ChromePdfRenderer()
secureRenderer.LoginCredentials = New ChromeHttpLoginCredentials With {
    .Username = "user@example.com",
    .Password = "secure-password"
}

secureRenderer.RenderingOptions.WaitFor.NetworkIdle(500)
Dim securePdf = secureRenderer.RenderUrlAsPdf("___PROTECTED_URL_76___")
securePdf.SaveAs("secure-dashboard.pdf")
$vbLabelText   $csharpLabel

IronPDF 会执行 JavaScript 并等待内容加载完毕后再生成 PDF 文件。 了解身份验证Cookie

如何在PDF中处理响应式设计?

配置响应式网站的视口:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperFit.UseResponsiveCssRendering(1280);
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.ViewPortWidth = 1920;

var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_77___");
pdf.SaveAs("responsive-output.pdf");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperFit.UseResponsiveCssRendering(1280);
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen;
renderer.RenderingOptions.ViewPortWidth = 1920;

var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_77___");
pdf.SaveAs("responsive-output.pdf");
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperFit.UseResponsiveCssRendering(1280)
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Screen
renderer.RenderingOptions.ViewPortWidth = 1920

Dim pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_77___")
pdf.SaveAs("responsive-output.pdf")
$vbLabelText   $csharpLabel

请参阅视口文档响应式 CSS 指南

IronPDF 提供哪些高级 PDF 功能?

如何添加专业的页眉和页脚?

页眉和页脚可以改善多页文档:

var renderer = new ChromePdfRenderer();

// Configure header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    MaxHeight = 50,
    HtmlFragment = @"
        <div style='text-align: center; font-size: 12px;'>
            Annual Report 2024 - Confidential
        </div>",
    BaseUrl = new Uri(@"file:///C:/assets/")
};

// Configure footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    MaxHeight = 30,
    HtmlFragment = @"
        <div style='text-align: center; font-size: 10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true
};

renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;

var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1>");
pdf.SaveAs("report-with-headers.pdf");
var renderer = new ChromePdfRenderer();

// Configure header
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    MaxHeight = 50,
    HtmlFragment = @"
        <div style='text-align: center; font-size: 12px;'>
            Annual Report 2024 - Confidential
        </div>",
    BaseUrl = new Uri(@"file:///C:/assets/")
};

// Configure footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    MaxHeight = 30,
    HtmlFragment = @"
        <div style='text-align: center; font-size: 10px;'>
            Page {page} of {total-pages}
        </div>",
    DrawDividerLine = true
};

renderer.RenderingOptions.MarginTop = 60;
renderer.RenderingOptions.MarginBottom = 40;

var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1>");
pdf.SaveAs("report-with-headers.pdf");
Dim renderer = New ChromePdfRenderer()

' Configure header
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .MaxHeight = 50,
    .HtmlFragment = "
        <div style='text-align: center; font-size: 12px;'>
            Annual Report 2024 - Confidential
        </div>",
    .BaseUrl = New Uri("file:///C:/assets/")
}

' Configure footer with page numbers
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .MaxHeight = 30,
    .HtmlFragment = "
        <div style='text-align: center; font-size: 10px;'>
            Page {page} of {total-pages}
        </div>",
    .DrawDividerLine = True
}

renderer.RenderingOptions.MarginTop = 60
renderer.RenderingOptions.MarginBottom = 40

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1>")
pdf.SaveAs("report-with-headers.pdf")
$vbLabelText   $csharpLabel

特殊占位符(如{page}{total-pages}会自动替换。 请查看标题教程

如何在PDF文件中添加水印?

使用水印保护文档:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");

// Apply text watermark
pdf.ApplyWatermark(
    "<div style='font-size: 72px; color: red; opacity: 0.3;'>DRAFT</div>",
    rotation: 45,
    opacity: 30
);

pdf.SaveAs("watermarked-document.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");

// Apply text watermark
pdf.ApplyWatermark(
    "<div style='font-size: 72px; color: red; opacity: 0.3;'>DRAFT</div>",
    rotation: 45,
    opacity: 30
);

pdf.SaveAs("watermarked-document.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>")

' Apply text watermark
pdf.ApplyWatermark(
    "<div style='font-size: 72px; color: red; opacity: 0.3;'>DRAFT</div>",
    rotation:=45,
    opacity:=30
)

pdf.SaveAs("watermarked-document.pdf")
$vbLabelText   $csharpLabel

了解水印技术印章选项

数字签名需要哪些条件?

添加签名以证明其真实性:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");

// Load certificate
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");

// Create signature
var signature = new PdfSignature(cert)
{
    SigningContact = "John Smith",
    SigningLocation = "New York, NY",
    SigningReason = "Contract Approval"
};

// Sign the PDF
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>");

// Load certificate
var cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password");

// Create signature
var signature = new PdfSignature(cert)
{
    SigningContact = "John Smith",
    SigningLocation = "New York, NY",
    SigningReason = "Contract Approval"
};

// Sign the PDF
pdf.Sign(signature);
pdf.SaveAsRevision("signed-contract.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Contract Agreement</h1>")

' Load certificate
Dim cert = X509CertificateLoader.LoadPkcs12FromFile("certificate.pfx", "password")

' Create signature
Dim signature = New PdfSignature(cert) With {
    .SigningContact = "John Smith",
    .SigningLocation = "New York, NY",
    .SigningReason = "Contract Approval"
}

' Sign the PDF
pdf.Sign(signature)
pdf.SaveAsRevision("signed-contract.pdf")
$vbLabelText   $csharpLabel

探索基于证书的签名HSM 集成

如何实现PDF安全功能?

保护敏感信息:

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Set metadata
pdf.MetaData.Author = "Corporate Security";
pdf.MetaData.Title = "Confidential Report";

// Apply encryption
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("secure-document.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Set metadata
pdf.MetaData.Author = "Corporate Security";
pdf.MetaData.Title = "Confidential Report";

// Apply encryption
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;

pdf.SaveAs("secure-document.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

' Set metadata
pdf.MetaData.Author = "Corporate Security"
pdf.MetaData.Title = "Confidential Report"

' Apply encryption
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.OwnerPassword = "owner456"
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False

pdf.SaveAs("secure-document.pdf")
$vbLabelText   $csharpLabel

审查PDF安全文档清理措施

如何在生产中部署 IronPDF?

Windows Server部署需要哪些条件?

启动时配置 IronPDF:

var builder = WebApplication.CreateBuilder(args);

// Configure license
IronPdf.License.LicenseKey = builder.Configuration["IronPdf:LicenseKey"];

// Configure for Windows Server
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
IronPdf.Installation.TempFolderPath = @"D:\IronPdfTemp";

// Configure logging
IronPdf.Logging.LoggingMode = IronPdf.Logging.PdfLoggingModes.All;
IronPdf.Logging.LogFilePath = @"D:\Logs\IronPdf.log";

var app = builder.Build();
var builder = WebApplication.CreateBuilder(args);

// Configure license
IronPdf.License.LicenseKey = builder.Configuration["IronPdf:LicenseKey"];

// Configure for Windows Server
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
IronPdf.Installation.TempFolderPath = @"D:\IronPdfTemp";

// Configure logging
IronPdf.Logging.LoggingMode = IronPdf.Logging.PdfLoggingModes.All;
IronPdf.Logging.LogFilePath = @"D:\Logs\IronPdf.log";

var app = builder.Build();
Dim builder = WebApplication.CreateBuilder(args)

' Configure license
IronPdf.License.LicenseKey = builder.Configuration("IronPdf:LicenseKey")

' Configure for Windows Server
IronPdf.Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
IronPdf.Installation.TempFolderPath = "D:\IronPdfTemp"

' Configure logging
IronPdf.Logging.LoggingMode = IronPdf.Logging.PdfLoggingModes.All
IronPdf.Logging.LogFilePath = "D:\Logs\IronPdf.log"

Dim app = builder.Build()
$vbLabelText   $csharpLabel

请参阅Windows 安装IIS 部署

如何在Linux环境下部署?

Linux 需要额外的依赖项:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y \
    libgdiplus \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    && apt-get clean

WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "MyApp.dll"]

请参阅Linux 部署Docker 集成

需要进行哪些 Azure 应用服务配置?

配置 Azure:

{
  "IronPdf": {
    "LicenseKey": "your-license-key",
    "TempFolderPath": "D:\\home\\IronPdfTemp",
    "ChromeGpuMode": "Disabled"
  }
}

了解Azure 部署Azure Functions

IronPDF 在 .NET PDF 库环境中的优势体现在哪里?

为什么基于 Chrome 的渲染是一项重大进步?

Chrome 引擎具有根本性的优势。 其他网站使用较旧的引擎,而 IronPDF 则使用 Chrome 浏览器所采用的技术。 当 Chrome 添加 CSS 属性或 JavaScript API 时,IronPDF 自然而然地也获得了这些功能。 这提供了比传统解决方案更优越的像素级完美渲染效果

跨平台支持究竟是如何运作的?

IronPDF 使用平台改进型二进制文件,在 Windows、Linux 和 macOS 上提供一致的渲染效果。 无论是在 Windows 上开发还是部署到 Linux 容器,输出结果都相同。 了解平台注意事项引擎选项

IronPDF有哪些独特的高级功能?

除了基本转换功能外,IronPDF 还支持: 页眉和页脚 可填写表格 水印背景 数字签名加密 *合并拆分操作

接下来该如何开始?

IronPDF 将 HTML 到 PDF 的转换简化为简单易用的实现方式。 其 Chrome 引擎确保了准确性,而 API 设计则使集成变得简单。 从基本转换到高级功能,IronPDF 可满足各种 PDF 需求。

入门需要三个步骤:安装NuGet 包、编写您的第一段代码,然后充满信心地部署。 免费试用期为 30 天,提供完整的功能供评估。

IronPDF 许可页面显示了四个永久许可级别(Lite、Plus、Professional 和 Unlimited),并针对不同团队规模提供了定价和功能。

浏览代码示例教程API 文档。 IronPDF 的灵活许可模式可满足从个人开发者到企业团队的各种需求。 请查看更新日志以获取最新信息。

常见问题解答

IronPDF 有什么用途?

IronPDF 用于在 .NET 应用程序中将 HTML 转换为 PDF。它支持现代 CSS 和 JavaScript,并能生成高质量的 PDF 文档。

IronPDF 如何处理复杂的 HTML 布局?

IronPDF 使用基于 Chrome 的渲染引擎来精确处理复杂的 HTML 布局,确保 PDF 输出与您在浏览器中看到的内容一致。

IronPDF 能否在 PDF 转换过程中执行 JavaScript?

是的,IronPDF 可以执行 JavaScript,这对于在 PDF 输出中准确渲染动态内容至关重要。

IronPDF 在 .NET 应用程序中容易实现吗?

IronPDF 的设计宗旨是易于实现和部署,使使用 .NET 的开发人员能够轻松上手。

IronPDF 可以将哪些类型的 HTML 源转换为 PDF?

IronPDF 可以将 HTML 文件、HTML 字符串和整个网页转换为 PDF 格式。

IronPDF能否在PDF中保持原始HTML的质量?

是的,IronPDF 可以生成高质量的 PDF 文档,其保真度与原始 HTML 内容相同。

IronPDF 与其他 PDF 转换器有何不同?

IronPDF 采用基于 Chrome 的渲染引擎,提供无缝的转换体验,确保与现代 Web 标准兼容。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。