IronPDF 教程 .NET Core PDF生成 Convert HTML to PDF in .NET Core: End-to-End Guide for URLs, Razor Views, Security & Docker Jacob Mellor 已更新:十一月 13, 2025 Download IronPDF NuGet 下载 DLL 下载 Windows 安装程序 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article This article was translated from English: Does it need improvement? Translated View the article in English 直接从 HTML 生成高保真 PDF 是现代 .NET 应用程序中的常规需求——报告、发票和票据都需要与网页用户界面匹配的像素完美输出。 IronPDF 通过公开一个单一的 C# API 来简化此工作流程,将 HTML、Razor 视图和完整网站呈现为符合标准的 PDF 文档。 在本指南结束时,开发人员将能够在 ASP.NET Core 项目中转换 URL、原始 HTML 或 MVC 视图,并将相同的代码部署到 Windows、Linux、Docker 或无服务器环境。 提示对于布局问题,IronPDF 提供了一个无头 Chrome 调试器,帮助在 PDF 呈现之前诊断 CSS、JavaScript 和媒体查询的怪癖。 审查专用的 像素完美 HTML 到 PDF 指南 以了解深入的技术。 快速入门:在 .NET Core 中从 HTML 创建 PDF 使用 IronPDF 库轻松将 HTML 转换为 .NET Core 中的 PDF。 本指南提供了一个简单的示例,以最少的代码快速开始,将 HTML 内容呈现到高质量的 PDF 中。 非常适合希望轻松将 PDF 创建集成到其应用程序中的开发人员。 Get started making PDFs with NuGet now: Install IronPDF with NuGet Package Manager PM > Install-Package IronPdf Copy and run this code snippet. var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>"); Deploy to test on your live environment Start using IronPDF in your project today with a free trial Free 30 day Trial class="hsg-featured-snippet"> 最小工作流程(5个步骤) 安装 IronPdf NuGet 包 使用 RenderUrlAsPdf 转换一个网站 URL 通过 RenderHtmlAsPdf 呈现原始 HTML 将 MVC 视图导出为 PDF 调整纸张尺寸、边距、页眉和页脚 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 ## 快速启动检查表 1. **安装** – `Install-Package IronPdf` 2. **呈现 URL** – `ChromePdfRenderer.RenderUrlAsPdf()` 3. **呈现原始 HTML** – `ChromePdfRenderer.RenderHtmlAsPdf()` 4. **导出 Razor 视图** – `ChromePdfRenderer.RenderHtmlAsPdfAsync()` 5. **微调输出** – 利用 `ChromePdfRenderer.RenderingOptions` ### 本教程涵盖的内容 - URL、HTML 字符串和 Razor 视图转换 - 纸张、边距和媒体类型配置 - 跨平台部署(Windows、Linux、Docker) - 后处理:合并、水印、密码保护和数字签名 PDF - 端到端样本:票务 MVC 应用程序 #### 开始使用 IronPDF 今天在您的项目中使用 IronPDF,免费试用。 第一步: 免费开始 --- ## 如何在 .NET Core 中安装 PDF 库? 在任何 .NET 8项目中安装库只需一行代码,并且与 .NET 9 preview 和即将发布的 .NET 10 版本保持向前兼容。 使用 NuGet 的包管理器控制台,包管理器将自动解析 Windows、Linux、Docker 和无服务器目标的所有依赖项。 ```shell PM> Install-Package IronPdf # .NET 8 LTS and higher ``` 请注意**需要 CLI?**相同的命令可以在项目文件夹中使用 `dotnet add package IronPdf`)。}] 安装完成后,通过转换任何公共网址确认一切正确连接: ```csharp // Program.cs — .NET 8 LTS using IronPdf; var renderer = new ChromePdfRenderer(); // Render a live website to PDF using PdfDocument pdf = renderer.RenderUrlAsPdf("https://example.com"); // Persist to disk pdf.SaveAs("website-snapshot.pdf"); ``` ### 其工作原理 - `ChromePdfRenderer` 启动一个沙盒化的 Chromium 实例,无需单独安装 Chrome。 - `RenderUrlAsPdf` 捕获完整呈现的 DOM,包括 JavaScript 驱动的内容、CSS 媒体查询和字体。 - 生成的 `PdfDocument` 提供合并、密码保护或数字签名输出的助手方法——教程后面将介绍这些功能。 For more detail on deployment nuances (Azure App Service, AWS Lambda, on-prem Linux), see the dedicated **[installation guide](/get-started/windows/)** and the **[advanced NuGet setup](/get-started/advanced-installation-nuget/)** pages. 关于 Docker 和 K8s 集群的内部 CI/CD 提示,请参阅 **[Docker 部署最佳实践](/get-started/ironpdf-docker/)**。 --- ## .NET Core 服务如何将实时网站网址转换为 PDF? 只需调用 `RenderUrlAsPdf`:传递任何可公开访问的 URL,IronPDF 即可返回完全呈现、符合标准的 PDF。 下面的代码适用于 .NET 8 LTS,并且在 .NET 9 预览以及计划的 2025 年 .NET 10 版本中无需更改即可编译。 ### 逐步示例 ```csharp // Program.cs — .NET 8 LTS-compatible using IronPdf; // 1. Activate a license (or trial key) IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"; // 2. Create a reusable renderer instance var renderer = new ChromePdfRenderer { RenderingOptions = { // Force A4 portrait output and apply @media print styles PaperSize = PdfPaperSize.A4, CssMediaType = PdfCssMediaType.Print } }; // 3. Convert Microsoft Docs home page to PDF using PdfDocument pdf = renderer.RenderUrlAsPdf("https://learn.microsoft.com/"); // 4. Save the PDF or stream it from a Web API pdf.SaveAs("docs-offline-copy.pdf"); ``` ### 其工作原理 - `ChromePdfRenderer` 启动一个沙盒化的 Chromium 实例,无需系统 Chrome 依赖,从而保持 Docker 镜像精简。 - `RenderUrlAsPdf` 在快照前等待 DOM 和 JavaScript 完成,以便单页应用程序正确呈现。 - 设置 `CssMediaType` 为 **Print** 告诉引擎使用特定于打印的规则,匹配浏览器的_打印 → 保存为 PDF_输出。 - 生成的 `PdfDocument` 可以加密、数字签名、合并或栅格化——这些功能将在后面的部分介绍。 [{t:(**像素完美调试:**启用 `renderer.LoggingOptions.DebugMode = true` 并按照 [无头 Chrome 调试指南](/how-to/pixel-perfect-html-to-pdf/) 在渲染期间检查实时的 DevTools。 ### 相关资源 - API 参考 – [`ChromePdfRenderer.RenderUrlAsPdf`](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html#IronPdf_ChromePdfRenderer_RenderUrlAsPdf_System_String_) - API 参考 – [`PdfDocument.SaveAs`](https://ironpdf.com/object-reference/api/IronPdf.PdfDocument.html#IronPdf_PdfDocument_SaveAs_System_String_) - 教程 – [在 Docker 容器中部署 IronPDF](/get-started/ironpdf-docker/) --- ## 如何在 .NET Core 中将原始 HTML 转换为 PDF? 将 HTML 字符串或 Razor 视图的渲染标记传递给 `ChromePdfRenderer.RenderHtmlAsPdf` 可立即生成符合标准的 PDF。 该方法启动 IronPDF 的嵌入式 Chromium 引擎,因此无需外部浏览器安装或 WebView 依赖。 下面显示的相同代码今天在 .NET 8 LTS 上编译,并与 2025 年 11 月计划发布的 .NET 9 和 .NET 10 版本保持向前兼容。 ### 示例 — 从 HTML 片段生成 PDF ```csharp // Program.cs — compatible with .NET 8 and newer using IronPdf; // Sample HTML fragment (could also be read from a file, Razor view, or CMS) const string html = """ Quarterly Report ProductRevenue ($) IronPDF for .NET1,200,000 IronOCR for .NET890,000 IronXL for .NET610,000 """; // 1. Create a renderer once and reuse it across conversions var renderer = new ChromePdfRenderer { RenderingOptions = { PaperSize = PdfPaperSize.A4, // ISO-standard paper size PaperOrientation = PdfPaperOrientation.Portrait, CssMediaType = PdfCssMediaType.Screen, // Respect on-screen CSS RenderDelay = 100, // Wait 100 ms for JS/animations FallbackEncoding = "utf-8" // Handle non-ASCII correctly } }; // 2. Render the HTML fragment using PdfDocument pdf = renderer.RenderHtmlAsPdf(html); // 3. Persist to disk or return via ASP.NET Core FileStreamResult pdf.SaveAs("q2-report.pdf"); ``` ### 代码演示了什么 - **Embedded Chromium** -- IronPDF bundles the [Chromium engine](/object-reference/api/IronPdf.Rendering.PdfRenderingEngine.html), guaranteeing [HTML5, CSS3, and JavaScript parity](/product-updates/milestones-stability-performance/) with modern browsers. - **单一依赖** -- 一个[轻量级 NuGet 安装](https://nuget.org/packages/IronPdf.Slim)覆盖 Windows、Linux、Docker 和 Azure/AWS,无需额外的系统库。 - **渲染选项** -- `PaperSize`、`CssMediaType` 和 `RenderDelay` 反映了浏览器的打印设置,使 PDF 匹配屏幕布局。 - **面向未来的目标** -- API 界面在 .NET 8、.NET 9 STS 和即将发布的 .NET 10 中是相同的,因此长期维护工作量最小。 - **后处理钩子** -- `PdfDocument` 提供合并、密码保护和[数字签名](/examples/digitally-sign-a-pdf/)的帮助器——这些处理将在本指南的后面部分介绍。 **Further reading:** see the step-by-step [HTML-string-to-PDF tutorial](/how-to/html-string-to-pdf/) and the full [`ChromePdfRenderer` API documentation](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html). --- ## 如何将 ASP .NET Core MVC 视图导出为 PDF? IronPDF 以与浏览器相同的方式呈现完全处理的 Razor 视图(`.cshtml`),并将结果流化为 `PdfDocument`。 以下工作流程保持控制器逻辑清晰,不需要浏览器插件,并且适用于 .NET 8 LTS、.NET 9 preview 和计划的 2025年 11月的 .NET 10 版本。 ### 端到端控制器示例 ```csharp // TicketsController.cs — .NET 8 LTS / MVC using IronPdf; using Microsoft.AspNetCore.Mvc; using YourApp.Models; // TicketViewModel public class TicketsController : Controller { private readonly ChromePdfRenderer _renderer; public TicketsController() { _renderer = new ChromePdfRenderer { RenderingOptions = { PaperSize = PdfPaperSize.A5, // Compact ticket size PaperOrientation = PdfPaperOrientation.Portrait, FitToPaperWidth = true, CssMediaType = PdfCssMediaType.Print, Margins = new PdfMargins(5, 10, 5, 10) // mm } }; } // GET /Tickets/Print/42 public async Task Print(int id) { TicketViewModel vm = await _service.GetTicketAsync(id); // 1. Render the Razor view to an HTML string string html = await RazorTemplateEngine.RenderViewAsync( HttpContext, "~/Views/Tickets/Print.cshtml", vm); // 2. Convert HTML → PDF using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html); // 3. Stream back as a file return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf"); } } ``` #### 此代码说明了什么 - **No temporary files** -- the Razor view is rendered in-memory, then passed directly to [`RenderHtmlAsPdf`](/object-reference/api/IronPdf.ChromePdfRenderer.html), avoiding disk I/O and temp-folder [race conditions](/examples/async/). - **票据大小的输出** -- `PaperSize = A5` 和窄边距使得在家打印的票据更加紧凑。 - **一致的打印样式** -- `CssMediaType = Print` 应用与浏览器使用的相同`@media print` CSS 规则。 - **二进制流动** -- `pdf.BinaryData` 在不接触文件系统的情况下传输文档,这对于 API 端点和 Lambda 函数是理想的。 - **可重用的渲染器** -- 每个控制器实例化一次 `ChromePdfRenderer`,然后重用,从而减少了进程生成开销。 id="pdfOptionsAcc"> class="accordion-item"> ## id="optPaper"> 纸张与方向 data-bs-parent="#pdfOptionsAcc"> class="accordion-body">`PaperSize`,`PaperOrientation`,`FitToPaperWidth`下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 class="accordion-item"> id="optMargins"> 边距与页眉/页脚 data-bs-parent="#pdfOptionsAcc"> class="accordion-body">Margins,Header,Footer,Watermark下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一步:添加加密、数字签名,或将多个票据合并到一个文件中。请参阅合并示例和 数字签名方法。 **Next step:** add encryption, digital signatures, or merge multiple tickets into a single file. See the [merge example](/examples/merge-pdfs/) and the [digital-signature how-to](/examples/digitally-sign-a-pdf/). --- IronPDF 公开了一个单一的 `ChromePdfRenderOptions` 对象,可以完全控制输出的各个方面——纸张尺寸、方向、页眉和页脚、JavaScript 时间、水印、加密和数字签名——无需任何额外的浏览器插件。 ### 代码示例 — 同时应用多个选项 ### 为什么这些选项很重要 ```csharp // AdvancedOptions.cs — .NET 8 compatible using IronPdf; var renderer = new ChromePdfRenderer(); // Configure everything in one place renderer.RenderingOptions = new ChromePdfRenderOptions { // 1. Page layout PaperSize = PdfPaperSize.A4, // ISO size PaperOrientation = PdfPaperOrientation.Portrait, Margins = new PdfMargins { Top = 20, Bottom = 25, Left = 15, Right = 15 }, // mm // 2. Timing & media CssMediaType = PdfCssMediaType.Print, // Respect @media print EnableJavaScript = true, RenderDelay = 200, // Wait 200 ms for animations // 3. Headers & footers (HTML gives full design freedom) HtmlHeader = "Invoice — {{date}}", HtmlFooter = "", // 4. Watermark Watermark = new HtmlStamp { HtmlTemplate = "CONFIDENTIAL下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。", VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center }, // 5. Security SecurityOptions = new PdfSecurityOptions { OwnerPassword = "StrongOwnerPwd!", UserPassword = "ReadOnly", AllowUserPrinting = false, AllowUserCopyPasteContent = false } }; // Render any HTML using PdfDocument pdf = renderer.RenderHtmlAsPdf(""); // Digitally sign with a PFX certificate (optional) pdf.SignAndStamp("./certs/company.pfx", "Iron Software", "Bangkok", "Approval"); // Save pdf.SaveAs("advanced-options-demo.pdf"); ``` - **`PaperSize`、`Margins` 和 `CssMediaType`** 反映了浏览器的打印对话框,因此屏幕布局和 PDF 在 Windows、Linux 和 Docker 上保持一致。 - **HTML 页眉和页脚**支持 Razor 令牌、CSS 和 JavaScript——方便用于动态页码或品牌标识。 - **`HtmlStamp`** 允许单行创建品牌水印,拥有完整的 HTML + CSS 控制。 - **[安全选项](/object-reference/api/IronPdf.Security.PdfSecuritySettings.html)**启用了 128 位加密、所有者/用户密码和细粒度的权限,无需第三方工具。 - **[数字签名](/examples/digitally-sign-a-pdf/)** 直接在代码中添加了一个加密的印章,保持法律真实性和防篡改。 - 提取助手,比如 `ExtractAllText` 和 `ExtractAllImages` 在需要分析时进行反向处理。 ### 快速参考 — 流行设置 id="advRenderAcc"> class="accordion-item"> ## id="layHead"> 页面布局 & 媒体 data-bs-parent="#advRenderAcc"> class="accordion-body"> `PaperSize`,`PaperOrientation`,`Margins`,`CssMediaType`,`RenderDelay` 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 class="accordion-item"> ## id="headFoot"> 页眉 & 页脚 data-bs-parent="#advRenderAcc"> class="accordion-body">`HtmlHeader`,`HtmlFooter`,动态 Razor 占位符,页码令牌下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 class="accordion-item"> ## id="wmHead"> 水印 data-bs-parent="#advRenderAcc"> class="accordion-body"> `Watermark`,`HtmlStamp`,不透明度,对齐 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 class="accordion-item"> ## id="secHead"> 加密 & 签名 data-bs-parent="#advRenderAcc"> class="accordion-body"> `SecurityOptions`,`SignAndStamp`,所有者/用户密码,128 位 AES,加密证书 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 继续到部署部分以确保跨平台的一致性。 ## 如何将 PDF 生成代码部署到 Linux 和 Windows 上的 Docker? --- IronPDF 作为一个**自包含 NuGet 包**发行,因此容器化一个 ASP.NET Core(或控制台)应用程序在**Windows 和 Linux**上都很简单。 关键在于将已发布的二进制文件复制到一个精简的运行时映像中,并在 Linux 上添加 IronPDF 所需的两个本机库(`libnss3` 和 `libatk1.0-0`)。 ### 多阶段 Dockerfile (Ubuntu 22.04) 请注意**为什么使用多阶段?**SDK镜像(第1阶段)编译项目; 最终的运行时镜像(第2阶段)保持精简——< 120 MB——因为构建工具被丢弃。 请注意**Windows 容器?**将第二阶段替换为 `mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022`——无需额外的包,因为 Chromium DLL 已捆绑。 ```dockerfile ####### ---------- stage 1 ---------- FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY ["MyPdfApp.csproj", "."] RUN dotnet restore COPY . . RUN dotnet publish -c Release -o /app/publish ####### ---------- stage 2 ---------- FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy ######## Install two native libs required by Chromium RUN apt-get update && \ apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=build /app/publish . ENTRYPOINT ["dotnet", "MyPdfApp.dll"] ``` ### 端到端验证脚本 - API 操作内部调用 `ChromePdfRenderer.RenderUrlAsPdf`,就像在 Section2 中一样。 ```bash docker build -t pdf-demo . docker run --rm -p 8080:80 pdf-demo ######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com ``` - IronPDF 在容器内部启动其沙盒化的 Chromium 进程——不需要 X 服务器,因为它是无头呈现的。 - 内存占用保持在 200 MB 以下,即使在大规模渲染期间也是如此。 [{t:(**故障排除提示:**如果容器日志显示 **“libnss3.so not found”** 错误,请确认 `libnss3` 和 `libatk1.0-0` 都存在。 不支持 Alpine 镜像,因为 musl C 库缺少所需的符号。)}] ### 内部资源 - 操作指南 – [在 Azure App Service Linux 上运行 IronPDF](/get-started/azure/) - 教程 – [在 Docker 容器中部署 IronPDF](/get-started/ironpdf-docker/) - API 参考 – [`ChromePdfRenderer` 类](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html) ## 如何在 .NET Core 中打开、合并、水印和提取现有 PDF 的内容? --- IronPDF 将每个 PDF(无论是由 IronPDF、Adobe® Acrobat 还是第三方工具生成)视作一级 `PdfDocument` 对象,可打开、编辑、加密和重新保存而不会损失质量。 相同的 API 界面在 .NET 8 LTS 上用于今日,并在 .NET 9 preview 和即将发布的 .NET 10 版本中保持不变地编译。 ### 统一示例 — 打开 → 合并 → 水印 → 提取 ### 为什么这很重要 ```csharp // ManipulateExistingPdf.cs — .NET 8 LTS compatible using IronPdf; using System.Linq; // Step 1: Open two existing files (password-protected PDFs are supported) PdfDocument invoice = PdfDocument.FromFile("invoice.pdf", "ReadOnly"); // open with user pwd PdfDocument tAndCs = PdfDocument.FromFile("terms.pdf"); // no pwd required // Step 2: Merge them (invoice pages first, then T&Cs) PdfDocument mergedPdf = PdfDocument.Merge(invoice, tAndCs); // 1-liner merge // Step 3: Apply a diagonal CONFIDENTIAL watermark to every page mergedPdf.ApplyStamp( "CONFIDENTIAL下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。", verticalAlignment : VerticalAlignment.Center, horizontalAlignment : HorizontalAlignment.Center); // Step 4: Extract all text and the first image for audit purposes string fullText = mergedPdf.ExtractAllText(); var image = mergedPdf.ExtractAllImages().FirstOrDefault(); // Step 5: Save or stream mergedPdf.SaveAs("invoice-with-terms.pdf"); ``` - **打开和合并** – `PdfDocument.FromFile` 加载任何符合标准的 PDF,包括加密文件,而 `PdfDocument.Merge` 在单次调用中合并任意数量的文档。 - **[水印](/examples/pdf-watermarking/)** – `ApplyStamp`(别名`HtmlStamp`)嵌入样式完整的 HTML/CSS 覆盖——徽标、二维码或对角文本——在选定页面上,无需栅格化。 - **内容提取** – `ExtractAllText` 和 `ExtractAllImages` 提取原始 UTF-8 文本或二进制图像流以供下游存档或 AI 管道使用。 - **数字签名准备** – 同一 `PdfDocument` 实例可以使用 `SignAndStamp` 封印,生成与 [ISO 32000-2 数字签名要求](https://www.iso.org/obp/ui/en/)对齐的 RFC 3161 兼容哈希。 - **开放标准合规性** – IronPDF 保留了原始 PDF 结构(字体、图层、XMP 元数据),因此输出与 Adobe® Reader 和其他 [ISO 32000-1](https://www.iso.org/standard/51502.html) 观看器兼容。 - **面向未来** – API 避免了互操作程序集和 Win32 GDI 调用,因此代码无需更改即可在 Windows、Linux、Docker 和即将推出的 .NET 10 无服务器 SKU 上运行。 **需要分割、旋转或删除页面吗?**请参阅 [页面级编辑教程](/tutorials/csharp-edit-pdf-complete-tutorial/) 以获取详细操作。 ## 在 .NET Core 中如何加密和数字签名 PDF? --- IronPDF 通过两个步骤保护文档:**基于 AES 的加密**(用户/所有者密码 + 细粒度的权限)和 **X.509 数字签名**,它们通过加密哈希封印文档。 两个 API 都存在于同一个 `PdfDocument` 对象上,因此工作流程与今天的 .NET 8 LTS 相同,并在 .NET 9 preview 和即将发布的 .NET 10 版本中保持不变地编译。 ### 示例 — 应用 256 位 AES、锁定打印权限并添加可见签名 ### 幕后 ```csharp // SecureAndSign.cs — .NET 8 LTS compatible using IronPdf; // Step 1: Load an existing PDF (or produce one with RenderHtmlAsPdf) PdfDocument pdf = PdfDocument.FromFile("financial-report.pdf"); // Step 2: Configure AES-256 encryption & permissions pdf.SecuritySettings = new PdfSecuritySettings { EncryptionAlgorithm = PdfEncryptionAlgorithm.AES256Bit, OwnerPassword = "IronAdmin!2025", UserPassword = "ReadOnly", AllowUserPrinting = PdfPrintSecurity.Disabled, AllowUserCopyPasteContent = false, AllowUserAnnotations = false }; // Step 3: Digitally sign with a PFX certificate pdf.SignAndStamp( certificatePath : "./certs/ironsoftware.pfx", authority : "Iron Software Ltd.", location : "Chicago, IL", reason : "Final approval" ); // Step 4: Persist or stream pdf.SaveAs("financial-report-secured-signed.pdf"); ``` - **AES-256 加密** -- IronPDF 用 NIST 认可的 [AES 密钥](/blog/net-help/csharp-aes-encryption/)包装负载,阻止未经授权的打开、打印或复制粘贴。 - **权限的细粒度** -- 属性如 [`AllowUserPrinting` 和 `AllowUserFormData`](/object-reference/api/IronPdf.Security.PdfSecuritySettings.html) 控制每个操作的权限; 任何限制生效都需要所有者密码。 - **数字签名** -- `SignAndStamp` 嵌入 RFC 3161 时间戳和证书链,创建 Adobe® Acrobat 和其他 ISO 32000-2 观看器识别的防篡改哈希。 - **一站式 API** -- 加密和签名都修改同一 `PdfDocument` 实例,避免多次文件传递并保留内部字体、图层和元数据。 [{t:(**故障排除提示:**如果Adobe Reader 报告“无效签名”,请确保 PFX 包含受信任的根证书并且 `reason`/`location` 字符串是 ASCII 清晰的。)}] ### 核心安全设置 id="secAcc"> class="accordion-item"> ## id="encHead"> 加密 & 密码 data-bs-parent="#secAcc"> class="accordion-body">`PdfSecuritySettings` → `OwnerPassword`,`UserPassword`,`EncryptionAlgorithm`,`AllowUserPrinting` Encryption & Passwords PdfSecuritySettings → OwnerPassword, UserPassword, EncryptionAlgorithm, AllowUserPrinting 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 class="accordion-item"> ## id="sigHead"> 数字签名 data-bs-parent="#secAcc"> class="accordion-body">`PdfDocument.SignAndStamp` — PFX 路径、授权、位置、原因、时间戳 Digital Signatures PdfDocument.SignAndStamp — PFX path, authority, location, reason, timestamp 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 - 操作指南 – [在 Azure App Service Linux 上运行 IronPDF](/get-started/azure/) for deeper dives - **示例** – [数字签名 PDF](/examples/digitally-sign-a-pdf/) - **API 参考** – [`PdfSecuritySettings`](/object-reference/api/IronPdf.Security.PdfSecuritySettings.html) ## 如何优化和扩展 HTML 到 PDF 性能在 .NET Core 中? --- IronPDF 的 Chromium 引擎已在现代硬件上呈现大多数页面<1s,但吞吐量可以通过**批量渲染、启用多线程和削减无头 Chrome 开销**来增加。 以下技巧同样适用于所有 .NET 版本。 ### 1. 在后台线程池中批量渲染 - `ChromePdfRenderer` 是 **[线程安全的](/examples/threading/)**; ```csharp // BatchRender.cs — Thread-safe on .NET 8+ using IronPdf; using System.Threading.Tasks; var htmlSources = Directory.GetFiles("./html", "*.html"); var renderer = new ChromePdfRenderer(); // reuse 1 instance Parallel.ForEach(htmlSources, new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount }, file => { string html = File.ReadAllText(file); using PdfDocument pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs(Path.ChangeExtension(file, ".pdf")); }); ``` 单个实例可以服务于数十个并发任务而无死锁。 - `Parallel.ForEach` 饱和每个 CPU 核心; 典型服务器的吞吐量比单线程循环增加 4–6 倍。 - 如果 ASP.NET 请求排队,请[将繁重的渲染移至托管的后台服务或消息队列](https://stackoverflow.com/questions/65237160/ironpdf-deadlocks-when-running-in-parallel)以保持响应时间短。 ### 2. 修剪无头 Chrome 启动成本 IronPDF 提供了自己的 Chromium 构建,但每次渲染都需要一定的启动成本。 池化有帮助,**Linux 容器** 必须包括两个本机库: 缺少任何一个库将[“`libnss3.so not found`”错误](https://stackoverflow.com/questions/50701824/limit-chrome-headless-cpu-and-memory-usage)在 Docker 日志中出现。 ```dockerfile RUN apt-get update && \ apt-get install -y --no-install-recommends libnss3 libatk1.0-0 ``` [内存和 root 用户问题](https://issues.chromium.org/40527919) 在容器中。 [Recommended Chrome flags (automatically applied by IronPDF)](https://stackoverflow.com/questions/66947545/chrome-headless-not-working-as-root-with-no-sandbox) include `--disable-gpu` and `--no-sandbox` to reduce [memory and root-user issues](https://issues.chromium.org/40527919) in containers. ### 3. 使用`RenderDelay`或`WaitFor`等待延迟的JavaScript 页面在`DOMContentLoaded`之后执行计数动画或获取数据可能需要短暂延迟: ```csharp renderer.RenderingOptions.RenderDelay = 200; // ms // OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')"; ``` 查看专门的**[WaitFor教程](/how-to/waitfor/)**以获取自定义承诺和DOM检查。 ### 4. 启用一次请求的调试日志记录 ```csharp renderer.LoggingOptions.DebugMode = true; renderer.LoggingOptions.LogsToConsole = true; renderer.LoggingOptions.LogFilePath = "./logs/ironpdf-debug.log"; ``` 实时DevTools跟踪可以揭示丢失的字体、404图片和不重新编译代码的计时事件。 ### 5. 重用模板PDF而不是重新渲染 对于发票运行,[创建带有占位符](/troubleshooting/ironpdf-performance-assistance/)的**模板PDF**如`[[name]]`,并执行文本替换而不是重建复杂的HTML。 它速度快10倍且内存轻。 ### 快速调整清单 Multi-Thread & Async Parallel.ForEach, async/await, reuse a single ChromePdfRenderer 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 Docker-Optimised Images Use aspnet:8.0-jammy; install libnss3 + libatk1.0-0; flags --no-sandbox, --disable-gpu 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 JavaScript Timing RenderDelay, WaitFor(), log DevTools timeline for slow SPA hydrations 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 下一任务:合并多个 PDF,提取文字和图像,并部署到 Docker 或无服务器。 ### 进一步阅读 - 如何——[使用异步/多线程生成PDF](/how-to/async/) - 疑难排解——[性能协助中心](/troubleshooting/ironpdf-performance-assistance/) - 示例——[线程渲染演示](/examples/threading/) --- ## 我在哪里可以下载免费试用版、选择许可证并获取专家支持? {#anchor-10-resources} A [30-day **trial key**](trial-license) is issued instantly from the [_Start Free Trial_](trial-license) form and unlocks every feature—including HTML-to-PDF, digital signatures, and encryption—without watermarking. 评估库后,选择永久的**开发者**、**部署**或**企业**许可证; 每个计划都包括免费的小更新、开发/暂存/生产使用权和30天退款保证。 应用密钥是单行代码(`IronPdf.License.LicenseKey = "YOUR-KEY";`),可以在CI/CD管道中自动化。 Comprehensive [**documentation**—quick-start guides](/docs/), [API reference](/object-reference/api/), and [tutorial videos](/blog/videos/)—lives at the docs portal and is updated for every .NET release. Engineering questions receive one-business-day responses via [live chat](#live-chat), [email](mailto:support@ironsoftware.com), or phone from the Chicago-based support team. 性能调整和部署常见问题汇总在性能协助中心。 ### 快捷链接 |资源|网址|重要性| |----------|-----|----------------| |获取30天试用密钥|[`https://ironpdf.com/demos/`](https://ironpdf.com/demos/)|解锁所有功能没有水印| |许可和定价|[`https://ironpdf.com/licensing/`](https://ironpdf.com/licensing/)|永久或订阅计划; Iron Suite捆绑10个库| |API参考|[`https://ironpdf.com/object-reference/api/`](https://ironpdf.com/object-reference/api/index.html)|完整的类文档,例如`ChromePdfRenderer`| |文档门户|[`https://ironpdf.com/docs/`](https://ironpdf.com/docs/)|指南、教程、示例项目| |性能协助|[`https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/`](https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/)|优化和扩展提示| |联系支持|[`https://ironsoftware.com/contact-us/`](https://ironsoftware.com/contact-us/)|实时聊天、电子邮件、电话支持 | ### 下一步 1. **[克隆示例仓库](https://github.com/iron-software/IronPdf.Examples/tree/main/tutorials/dotnet-core-pdf-generating)**,展示所有主要功能——从MVC视图渲染到AES-256加密。 2. **[将试用密钥](trial-license)**插入现有解决方案,运行单元测试以验证跨平台兼容性。 3. **[预约现场演示](https://ironpdf.com/#booking-demo)**与工程团队一起为项目特定的建议。 通过这些资源,任何.NET团队在一个单一的冲刺中都可以将像素完美的PDF投入生产——无论是在本地、Docker中还是无服务器。 常见问题解答 如何在 .NET Core 中将 HTML 转换为 PDF? 您可以使用 IronPDF 库在 .NET Core 中将 HTML 转换为 PDF。首先,安装 IronPDF NuGet 包,然后创建一个 ChromePdfRenderer 实例。使用 RenderHtmlAsPdf 方法将 HTML 字符串转换为 PDF。 如何将网站 URL 转换为 PDF 文档? 要将网站 URL 转换为 PDF 文档,请安装 IronPDF NuGet 包,创建一个 ChromePdfRenderer 实例,并使用 RenderUrlAsPdf 方法将 URL 渲染为 PDF。可以使用 SaveAs 方法保存结果。 将 Razor 视图转换为 PDF 的最佳方式是什么? 将 Razor 视图转换为 PDF 的最佳方式是使用 IronPDF。首先,将 Razor 视图渲染为 HTML 字符串,然后将此字符串传递给 RenderHtmlAsPdf 方法以创建 PDF 文档。 如何增强我的 PDF 文档的安全性? 通过使用 IronPDF 增强 PDF 安全性,可以应用 AES-256 加密、设置密码和控制用户权限。通过 SecuritySettings 属性配置这些设置,以限制诸如打印和编辑等操作。 有哪些自定义 PDF 渲染的选项? IronPDF 提供了多种渲染选项,通过 ChromePdfRenderOptions 类,包括设置纸张大小、方向、边距和应用 CSS 媒体类型。您还可以添加页眉、页脚和水印以实现定制的文档输出。 如何在 Docker 容器中部署 PDF 生成应用程序? 要在 Docker 容器中部署 PDF 生成应用程序,请在 Dockerfile 中配置 Linux 依赖项并设置用户权限。利用 IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig 进行自动依赖项管理。 如何使用 C# 为 PDF 添加水印? 您可以通过使用 Watermark 属性和 HtmlStamp 对象在 PDF 中添加水印。对于高级选项,HtmlStamper 类允许自定义定位和透明效果。 我可以为 PDF 文档添加数字签名吗? 是的,您可以使用 IronPDF 的 PdfSignature 类为 PDF 添加数字签名。对 PdfDocument 使用 Sign 方法,并提供一个证书文件以确保文档的完整性和真实性。 如何在 .NET Core 中优化 PDF 生成性能? 通过重用一个线程安全的 ChromePdfRenderer 实例、启用多线程,并去除不必要的无头 Chrome 启动标志来优化 PDF 生成性能。这些实践有助于提高应用程序的效率。 本教程中的 .NET Core HTML 转 PDF 示例是否也适用于 .NET 10? 是的。IronPDF 完全兼容 .NET 10,因此您可以在 .NET 10 项目中使用本教程中的 ChromePdfRenderer HTML 转 PDF 示例,而无需更改核心代码。主要区别在于在创建项目时针对 .NET 10,然后从 NuGet 安装最新的 IronPdf 包,以从 HTML、Razor 视图或 URL 生成像素完美的 PDF。 Jacob Mellor 立即与工程团队聊天 首席技术官 Jacob Mellor 是 Iron Software 的首席技术官,是 C# PDF 技术的先锋工程师。作为 Iron Software 核心代码库的原始开发者,自公司成立以来,他就塑造了公司的产品架构,并与首席执行官 Cameron Rimington 一起将其转变成一家公司,拥有50多人,服务于 NASA、特斯拉和全球政府机构。Jacob 拥有曼彻斯特大学 (1998-2001) 的一级荣誉土木工程学士学位。1999 年在伦敦创办了自己的第一家软件公司,并于 2005 年创建了他的第一个 .NET 组件后,他专注于解决微软生态系统中的复杂问题。他的旗舰 IronPDF 和 IronSuite .NET 库在全球已获得超过 3000 万次的 NuGet 安装,其基础代码继续为全球使用的开发者工具提供支持。拥有 25 年商业经验和 41 年编程经验的 Jacob 仍专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。 审核者 Jeffrey T. Fritz 首席项目经理 - .NET 社区团队 Jeff 也是 .NET 和 Visual Studio 团队的首席项目经理。他是 .NET Conf 虚拟会议系列的执行制片人,并主持“Fritz and Friends”直播节目,每周两次与观众一起谈论技术并编写代码。Jeff 撰写研讨会、演示文稿并计划包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP 峰会在内的最大型微软开发者活动的内容。 准备开始了吗? Nuget 下载 16,154,058 | 版本: 2025.11 刚刚发布 免费 NuGet 下载 总下载量:16,154,058 查看许可证 免费获取 30天试用密钥 即刻获取。 15天试用密钥 即刻获取。 试用表单提交成功。 您的试用密钥应该在电子邮件中。如果没有,请联系support@ironsoftware.com 无需信用卡或账户创建 在生产环境中测试且无水印 30天完全功能性产品 试用期间提供24/5技术支持 免费试用 IronPDF 5 分钟内设置完成 通过 NuGet 安装 版本: 2025.11 Install-Package IronPdf nuget.org/packages/IronPdf/ 在解决方案资源管理器中,右键点击引用,管理 NuGet 包 选择浏览并搜索 “IronPdf” 选择包并安装 下载 DLL 版本: 2025.11 立即下载 或在此处下载 Windows 安装程序。 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPdf.dll” $749 起 15 1000 1 现在已使用 Nuget 安装 您的浏览器正在下载 IronPDF 下一步:开始免费 30 天试用 无需信用卡 在真实环境中测试完全功能的产品24/5 技术支持 立即获取您的免费30 天试用密钥。 谢谢。如果您想与我们的许可团队交谈: 试用表单已成功提交。您的试用密钥应在电子邮件中。如果没有,请联系我们support@ironsoftware.com 安排电话交流 有问题?联系我们的开发团队。 无需信用卡或创建账户 15 1000 1 现在已使用 Nuget 安装 您的浏览器正在下载 IronPDF 下一步:开始免费 30 天试用 无需信用卡 在真实环境中测试完全功能的产品24/5 技术支持 谢谢。查看您的许可证选项: 谢谢。如果您想与我们的许可团队交谈: 查看许可 安排电话交流 有问题吗? 联系我们 与我们的开发团队交流。 有问题?联系我们的开发团队。 免费开始 无需信用卡 在实际环境中测试 在生产环境中测试,没有水印。在您需要的地方使用。 功能齐全的产品 使用功能齐全的产品30天。几分钟内即可启动和运行。 24/5 技术支持 在产品试用期间,全面访问我们的支持工程团队 立即获取您的免费30天试用密钥。 无需信用卡或账户创建 试用表单已提交成功。 您的试用密钥应该在邮件中。如果没有,请联系support@ironsoftware.com 受到全球数百万工程师的信赖 免费开始 无需信用卡 在实际环境中测试 在生产环境中测试,没有水印。在您需要的地方使用。 功能齐全的产品 使用功能齐全的产品30天。几分钟内即可启动和运行。 24/5 技术支持 在产品试用期间,全面访问我们的支持工程团队 立即获取您的免费30天试用密钥。 使用 NuGet 安装 查看许可 许可证起价 $749。 有问题吗?联系我们。 受到全球数百万工程师的信赖 联系销售团队 预订无义务咨询 我们如何为您提供帮助: 就您的工作流程和痛点提供咨询看看其他公司如何解决它们的.NET文档需求回答您的所有问题,以确保您获得所需的所有信息。(没有任何承诺。)获取符合您项目需求的定制报价 获取您的无义务咨询 填写下面的表格或通过sales@ironsoftware.com 您的资料将始终保密。 深受全球 200 多万工程师信赖 预定免费现场演示 预定一次 30 分钟的个人演示。 无合约、无卡号、无任何长期承诺。 下面是您可以期待的内容: 我们产品及其关键功能的在线演示获取项目特定功能建议所有问题均会得到解答,以确保您拥有所需的所有信息。(无需任何承诺。) 选择时间 您的信息 预约您的免费现场演示 深受全球 200 多万工程师信赖 法律信息 版权所有 © Iron Software 2013-2025 条款 隐私政策 Cookie 版权所有 © Iron Software 2013-2025 条款 隐私政策 Cookie