产品比较 IronPDF vs Accusoft PDF Viewer:哪个C#库最适合HTML到PDF转换? Curtis Chau 已更新:2026年2月14日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 IronPDF和Accusoft PDF Viewer都可以在.NET中将HTML转换为PDF。 IronPDF提供简单的语法、本地处理且无需云依赖,从$699起进行无限制转换。而Accusoft需要互联网连接,并按交易收费。 ## 比较 IronPDF 与 Accusoft PDF Viewer 将 HTML 转换为 PDF 为 PDF 文件设置页眉和页脚 将 PDF 转换为图像文件 比较许可、免费试用选项等 概述 什么是IronPDF及其工作原理? IronPDF是一个C# HTML到PDF库,使开发人员能够从源创建PDF文件,如HTML字符串、网页和URL。 它还允许设置属性,如水印、书签和页眉和页脚。 此外,开发人员可以将多个PDF文件合并为一个,或将PDF页面转换为图像,反之亦然,使用图像到PDF转换。 IronPDF对开发是免费的,并为实时项目提供30天部署试用。 它提供完整的文档、代码示例和API参考,帮助开发人员快速入门。 Developers can download a file project from this link. What Is Accusoft PrizmDoc Viewer and How Does It Work? PrizmDoc Viewer是一个REST API,与PDF文件一起工作,并远程将其转换为其他格式。 PrizmDoc 可以将超过100种不同文件格式转换为PDF,并将PDF转换为PNG、JPG、TIFF和SVG。 它还为应用程序提供各种电子签名选项。 How Do IronPDF and PrizmDoc Viewer Compare? IronPDF `PrizmDoc` Viewer Work with [PDF files programmatically](/how-to/csharp-parse-pdf/). 以编程方式处理 PDF 文件。 Supports [.NET Core](/docs/) with [Windows](/get-started/windows/), [Mac](/get-started/macos/), or [Linux](/get-started/linux/). 支持使用 Windows、Mac 或 Linux 的 .NET Core。 [Works Locally](/get-started/installation-overview/) Sends Documents to a [remote server](/get-started/ironpdfengine/). Work with or without [Asynchronous Programming](/how-to/async/). Must use Asynchronous Programming with `System.Threading.Tasks`. Works offline once [installed](/get-started/installation-overview/). Requires internet connection for `PrizmDoc` server requests. Provides many [predefined functions](/features/). 提供一些预定义的功能。 Often requires [minimal lines of code](/tutorials/html-to-pdf/). 通常需要许多行代码。 [无限 conversions](/licensing/) per project in each license. 云托管许可中的交易有限。 [Free for development](/get-started/quickstart/) without time limits. 仅有 300 笔交易可试用。 让我们安装这两个库并比较代码。 第 1 步:安装 如何在我的.NET项目中安装IronPDF? 在项目中安装IronPDF有两种方式,两种方式没有差别。 IronPDF支持多种环境,包括Azure部署、AWS Lambda、Docker容器和Blazor应用程序。 下载IronPDF的不同方式是什么? 下载IronPDF.dll并将其引用添加到项目中。 开发人员还可以使用Windows安装程序进行系统范围的安装。 之后,可以使用以下方式访问IronPdf命名空间: using IronPdf; using IronPdf; $vbLabelText $csharpLabel 现在,开发人员可以轻松访问IronPDF提供的函数和类,包括用于渲染的ChromePdfRenderer、PDF文档操作和安全功能。 如何通过NuGet包管理器安装IronPDF? 软件包管理器控制台: 如果使用包管理器控制台,请运行以下命令: _CODEBLOCK1 管理解决方案的软件包: 如果使用NuGet包管理器 GUI,请在搜索栏中浏览IronPDF并安装。 有关高级安装选项,包括Linux、macOS或Windows的特定平台包,请查阅安装指南。 How Do I Install PrizmDoc Viewer from Accusoft? PrizmDoc Viewer有两个部分:一个服务器端组件称为PrizmDoc Server,表现为RESTful API,和一个客户端项目,发送请求到API并接收响应。 与没有外部依赖本地运行的IronPDF不同,PrizmDoc需要网络连接以进行基于云的操作。 How Can I Access the PrizmDoc Server? PrizmDoc服务器是一个服务器端应用程序,它接收包含文档的基本信息作为请求(输入),将文档转换为PDF文件,然后将转换后的PDF文件返回作为响应(输出)。 它作为产品的技术核心——一个文档处理和转换引擎。开发人员可以通过两种不同方法使用它,这两种方法具有相同的编程结构和技术: 1.自行托管: 此选项需要安排一个服务器。 下载PrizmDoc服务器然后安装它。 阅读更多关于如何在Windows上安装PrizmDoc服务器的信息。 注意: 它需要至少32 GB RAM和4核CPU以提高性能。 相比之下,IronPDF的系统要求要低得多。 2.云托管: 这种基于云的服务消除了安排服务器的需要。 要使用此选项,请创建一个账户并从首页的API key。 首先,让我们检查与PrizmDoc Viewer一起工作的基本结构,以通过C#控制台应用程序使用Accusoft server直接与其交互,将文档转换为PDF文件。 注意:以下示例演示PrizmDoc如何在概念上处理PDF文件。 它很长,所以可以跳过这个例子,直接继续对比。 Accusoft的工作结构是如何运作的? 这个例子将sample.pdf。 与IronPDF的简单HTML到PDF转换不同,PrizmDoc需要多次API调用。 注意:必须在项目中安装并引用Newtonsoft.Json库。 首先,将以下库添加到项目中: using System; using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager using System; using System.IO; using System.Net; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; // Install Newtonsoft.Json via NuGet Package Manager $vbLabelText $csharpLabel 然后创建一个公共变量Accusoft API Key并将API密钥粘贴在其中: static string ApiKey = "Your-API-KEY"; static string ApiKey = "Your-API-KEY"; $vbLabelText $csharpLabel 使用PrizmDoc Viewer处理PDF文件有三个步骤: 将文件上传到PrizmDoc服务器。 2.转换上传的文件。 从PrizmDoc服务器下载转换后的文件。 每个步骤都有一个单独的函数处理: static void Main(string[] args) { //---Upload file to Server--- JObject uploadResults = UploadToServer("myWebpage.html").Result; string fileID = (string)uploadResults.SelectToken("fileId"); string affinityToken = (string)uploadResults.SelectToken("affinityToken"); //---Convert the uploaded file to PDF--- JObject convertResults = Convert(affinityToken, fileID).Result; string processId = (string)convertResults.SelectToken("processId"); affinityToken = (string)convertResults.SelectToken("affinityToken"); //---Check the status that conversion is completed--- JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result; string convertStatus = (string)convertStatusResults.SelectToken("state"); //---Continuously checking whether conversion completed--- while (!(convertStatus.Equals("complete"))) { System.Threading.Thread.Sleep(30000); convertStatusResults = ConvertStatus(processId, affinityToken).Result; convertStatus = (string)convertStatusResults.SelectToken("state"); } //---Download the converted file from server--- string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId"); DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait(); Console.WriteLine("PDF file created successfully...!"); Console.ReadKey(); } static void Main(string[] args) { //---Upload file to Server--- JObject uploadResults = UploadToServer("myWebpage.html").Result; string fileID = (string)uploadResults.SelectToken("fileId"); string affinityToken = (string)uploadResults.SelectToken("affinityToken"); //---Convert the uploaded file to PDF--- JObject convertResults = Convert(affinityToken, fileID).Result; string processId = (string)convertResults.SelectToken("processId"); affinityToken = (string)convertResults.SelectToken("affinityToken"); //---Check the status that conversion is completed--- JObject convertStatusResults = ConvertStatus(processId, affinityToken).Result; string convertStatus = (string)convertStatusResults.SelectToken("state"); //---Continuously checking whether conversion completed--- while (!(convertStatus.Equals("complete"))) { System.Threading.Thread.Sleep(30000); convertStatusResults = ConvertStatus(processId, affinityToken).Result; convertStatus = (string)convertStatusResults.SelectToken("state"); } //---Download the converted file from server--- string newFileID = (string)convertStatusResults.SelectToken("output.results[0].fileId"); DownloadFromServer(affinityToken, newFileID, "sample.pdf").Wait(); Console.WriteLine("PDF file created successfully...!"); Console.ReadKey(); } $vbLabelText $csharpLabel 1.将文件上传到服务器: 2. public static async Task<JObject> UploadToServer(string fileToUpload) { FileInfo input = new FileInfo(fileToUpload); if (input == null) { throw new ArgumentException("Missing parameter input", nameof(input)); } var fileName = input.Name; var endpoint = new Uri("___PROTECTED_URL_123___"); using (var client = new WebClient()) { client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Content-Type", "application/octet-stream"); using (var reader = new BinaryReader(input.OpenRead())) { var data = reader.ReadBytes((int)reader.BaseStream.Length); var results = await client.UploadDataTaskAsync(endpoint, "POST", data); string getResult = Encoding.ASCII.GetString(results); return JObject.Parse(getResult); } } } public static async Task<JObject> UploadToServer(string fileToUpload) { FileInfo input = new FileInfo(fileToUpload); if (input == null) { throw new ArgumentException("Missing parameter input", nameof(input)); } var fileName = input.Name; var endpoint = new Uri("___PROTECTED_URL_123___"); using (var client = new WebClient()) { client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Content-Type", "application/octet-stream"); using (var reader = new BinaryReader(input.OpenRead())) { var data = reader.ReadBytes((int)reader.BaseStream.Length); var results = await client.UploadDataTaskAsync(endpoint, "POST", data); string getResult = Encoding.ASCII.GetString(results); return JObject.Parse(getResult); } } } $vbLabelText $csharpLabel 2.将上传的文件转换为 PDF: public static async Task<JObject> Convert(string affinityToken, string fileID) { var endpoint = new Uri("___PROTECTED_URL_124___"); using (var client = new WebClient()) { client.Headers.Add("Content-Type", "application/json"); client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Accusoft-Affinity-Token", affinityToken); JObject myJson = new JObject( new JProperty("input", new JObject( new JProperty("sources", new JArray( new JObject( new JProperty("fileId", fileID) ) ) ), new JProperty("dest", new JObject( new JProperty("format", "pdf") ) ) ) ) ); string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString()); return JObject.Parse(results); } } public static async Task<JObject> Convert(string affinityToken, string fileID) { var endpoint = new Uri("___PROTECTED_URL_124___"); using (var client = new WebClient()) { client.Headers.Add("Content-Type", "application/json"); client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Accusoft-Affinity-Token", affinityToken); JObject myJson = new JObject( new JProperty("input", new JObject( new JProperty("sources", new JArray( new JObject( new JProperty("fileId", fileID) ) ) ), new JProperty("dest", new JObject( new JProperty("format", "pdf") ) ) ) ) ); string results = await client.UploadStringTaskAsync(endpoint, "POST", myJson.ToString()); return JObject.Parse(results); } } $vbLabelText $csharpLabel 下面的JSON是myJson对象的结果值: { "input": { "sources": [ {"fileId": "Auto Generated FileId Value"} ], "dest": { "format": "pdf" } } } 检查转换是否完成。 public static async Task<JObject> ConvertStatus(string processId, string affinityToken) { string endpoint = "___PROTECTED_URL_125___" + processId; using (var client = new WebClient()) { client.BaseAddress = endpoint; client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Accusoft-Affinity-Token", affinityToken); string results = await client.DownloadStringTaskAsync(endpoint); return JObject.Parse(results); } } public static async Task<JObject> ConvertStatus(string processId, string affinityToken) { string endpoint = "___PROTECTED_URL_125___" + processId; using (var client = new WebClient()) { client.BaseAddress = endpoint; client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Accusoft-Affinity-Token", affinityToken); string results = await client.DownloadStringTaskAsync(endpoint); return JObject.Parse(results); } } $vbLabelText $csharpLabel 3.从服务器下载转换后的文件 public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile) { var endpoint = new Uri("___PROTECTED_URL_126___" + fileId); using (var client = new WebClient()) { client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Accusoft-Affinity-Token", affinityToken); FileInfo output = new FileInfo(outfile); using (var writeStream = output.Create()) { var results = await client.DownloadDataTaskAsync(endpoint); await writeStream.WriteAsync(results, 0, results.Length); } } } public static async Task DownloadFromServer(string affinityToken, string fileId, string outfile) { var endpoint = new Uri("___PROTECTED_URL_126___" + fileId); using (var client = new WebClient()) { client.Headers.Add("acs-api-key", ApiKey); client.Headers.Add("Accusoft-Affinity-Token", affinityToken); FileInfo output = new FileInfo(outfile); using (var writeStream = output.Create()) { var results = await client.DownloadDataTaskAsync(endpoint); await writeStream.WriteAsync(results, 0, results.Length); } } } $vbLabelText $csharpLabel 上述示例需要大量精力。 为了减轻工作量,Accusoft推出了一个名为Accusoft.PrizmDocServerSDK的.NET库,这是PrizmDoc Server REST API 的一个封装。 让我们看看如何在.NET项目中安装和使用这个库。 How Do I Install Accusoft.PrizmDocServerSDK? 有两种安装包装器的方法。 软件包管理器控制台: 如果使用包管理器控制台,请运行以下命令: _CODEBLOCK10 管理解决方案的软件包: 如果使用NuGet包管理器GUI,请在搜索栏中查找Accusoft.PrizmDocServerSDK并安装它。 现在,开发人员可以轻松访问Accusoft.PrizmDocServer命名空间并使用它: using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer; $vbLabelText $csharpLabel 教程 IronPDF与PrizmDoc Viewer在代码示例中的比较如何? 在审查了两个组件的介绍和安装后,是时候与两者一起工作了。 以下用例展示了使用这两个组件的实现,帮助理解编程结构,并确定哪一个最适合项目需求。 如何使用IronPDF转换HTML为PDF与PrizmDoc Viewer? 在这个比较中,让我们将一个名为myWebPage.html的网页转换为PDF文件并将其保存到目标位置。 IronPDF的Chrome渲染引擎提供像素完美的转换,完全支持CSS、JavaScript和web字体。 IronPDF如何将HTML转换为PDF? using IronPdf; static void Main(string[] args) { // Create rendering converter var converter = new ChromePdfRenderer(); // Render HTML file to PDF using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html"); // Save to target location PDF.SaveAs("sample.pdf"); } using IronPdf; static void Main(string[] args) { // Create rendering converter var converter = new ChromePdfRenderer(); // Render HTML file to PDF using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html"); // Save to target location PDF.SaveAs("sample.pdf"); } $vbLabelText $csharpLabel 上述代码创建bin>debug文件夹中。 IronPDF还支持HTML字符串、URL,甚至是包含HTML的ZIP文件作为输入源。 开发人员还可以指定这个位置:PDF.SaveAs("E:/sample.pdf");,或者保存到内存流中以进行云部署。 阅读更多关于使用IronPDF处理PDF文件的信息。 现在,使用PrizmDoc Viewer执行相同的任务以作比较。 PrizmDoc Viewer如何将HTML转换为PDF? 在PrizmDoc Viewer安装部分中,讨论了如何获取Accusoft API Key。 以下是如何使用它的方法。 首先,向PrizmDoc服务器发送请求并接收响应。 这个过程需要时间,需要异步编程。 IronPDF也支持异步方法以提高性能。 注意:使用PrizmDoc Viewer的云服务创建PDF文件时,请确保系统连接到互联网。 using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { ChromePdfRenderer().GetAwaiter().GetResult(); } private static async Task ChromePdfRenderer() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY"); // Specify HTML file and convert it to a PDF. ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html"); // Save PDF file to the target location await result.RemoteWorkFile.SaveAsync("sample.pdf"); } using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { ChromePdfRenderer().GetAwaiter().GetResult(); } private static async Task ChromePdfRenderer() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_127___", "Your-API-KEY"); // Specify HTML file and convert it to a PDF. ConversionResult result = await prizmDocServer.ConvertToPdfAsync("myWebPage.html"); // Save PDF file to the target location await result.RemoteWorkFile.SaveAsync("sample.pdf"); } $vbLabelText $csharpLabel 阅读更多关于使用PrizmDoc Viewer的信息。 哪个库提供更简单的HTML到PDF转换? 这些示例表明,IronPDF提供了更简单的方法来创建PDF文件,并且需要更少的时间。IronPDF还提供渲染选项以进行输出的微调,包括自定义纸张尺寸、边距和视口设置。 在使用IronPDF和PrizmDoc Viewer进行图像转PDF的比较中如何?" 此比较演示如何从debug文件夹中的创建PDF文件。 开发人员从IronPDF开始。 IronPDF如何将图像转换为PDF? using IronPdf; static void Main(string[] args) { // Specify the image to be converted using var converted = ImageToPdfConverter.ImageToPdf("google.png"); // Save PDF file to the target location converted.SaveAs("sample.pdf"); } using IronPdf; static void Main(string[] args) { // Specify the image to be converted using var converted = ImageToPdfConverter.ImageToPdf("google.png"); // Save PDF file to the target location converted.SaveAs("sample.pdf"); } $vbLabelText $csharpLabel IronPDF还支持多帧TIFF转换、嵌入来自Azure Blob存储的图像和Base64图像嵌入。 输出: 此截图显示上述代码创建的新的PDF文件sample.pdf: 使用IronPDF从图像创建PDF文件很简单。 现在,让我们使用PrizmDoc Viewer执行相同的任务并检查其生成的PDF文件。 PrizmDoc Viewer如何将图像转换为PDF? using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { ImageToPDF().GetAwaiter().GetResult(); } private static async Task ImageToPDF() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY"); // Specify the image to be converted ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png"); // Save PDF file to the target location await results.RemoteWorkFile.SaveAsync("sample.pdf"); } using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { ImageToPDF().GetAwaiter().GetResult(); } private static async Task ImageToPDF() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_128___", "Your-API-KEY"); // Specify the image to be converted ConversionResult results = await prizmDocServer.ConvertToPdfAsync("google.png"); // Save PDF file to the target location await results.RemoteWorkFile.SaveAsync("sample.pdf"); } $vbLabelText $csharpLabel 输出:此截图显示以上代码创建的新的PDF文件sample.pdf: 哪个库需要更少的代码进行图像到PDF转换? IronPDF只需要两行代码。 相比之下,使用PrizmDoc服务器需要更多行代码并使用异步编程。 IronPDF的输出也自动提供了一个可用的全页面文档。 IronPDF提供附加选项可用于图像定位和多个图像转换。 如何在使用IronPDF和PrizmDoc Viewer合并多个PDF文件的比较中?" 在这个比较中,假设存在三个名为C.pdf的PDF文件。 任务是要将它们合并为一个PDF文件。 这两个组件都可以执行此任务。 首先,示例显示如何使用IronPDF执行此操作。 IronPDF如何合并PDF文件? using IronPdf; using System.Collections.Generic; static void Main(string[] args) { // Create rendering converter var Renderer = new IronPdf.ChromePdfRenderer(); // Create a list of pdf files var PDFs = new List<PdfDocument>(); PDFs.Add(PdfDocument.FromFile("A.pdf")); PDFs.Add(PdfDocument.FromFile("B.pdf")); PDFs.Add(PdfDocument.FromFile("C.pdf")); // Merge the list of pdf file using PdfDocument PDF = PdfDocument.Merge(PDFs); // Save merged file to the target location PDF.SaveAs("sample.pdf"); foreach(var pdf in PDFs) { pdf.Dispose(); } } using IronPdf; using System.Collections.Generic; static void Main(string[] args) { // Create rendering converter var Renderer = new IronPdf.ChromePdfRenderer(); // Create a list of pdf files var PDFs = new List<PdfDocument>(); PDFs.Add(PdfDocument.FromFile("A.pdf")); PDFs.Add(PdfDocument.FromFile("B.pdf")); PDFs.Add(PdfDocument.FromFile("C.pdf")); // Merge the list of pdf file using PdfDocument PDF = PdfDocument.Merge(PDFs); // Save merged file to the target location PDF.SaveAs("sample.pdf"); foreach(var pdf in PDFs) { pdf.Dispose(); } } $vbLabelText $csharpLabel 上述代码创建C.pdf组合在一起。 IronPDF还支持在PDF之间添加和复制页面和拆分PDF。 现在,让我们使用PrizmDoc Viewer执行相同的任务。 PrizmDoc Viewer如何合并PDF文件? using System.Threading.Tasks; using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { PdfMerge().GetAwaiter().GetResult(); } private static async Task PdfMerge() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY"); // Pass the list of pdf files to PrizmDoc Server ConversionResult result = await prizmDocServer.CombineToPdfAsync( new [] { new ConversionSourceDocument("A.pdf"), new ConversionSourceDocument("B.pdf"), new ConversionSourceDocument("C.pdf"), }); // Save merged file to the target location await result.RemoteWorkFile.SaveAsync("sample.pdf"); } using System.Threading.Tasks; using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { PdfMerge().GetAwaiter().GetResult(); } private static async Task PdfMerge() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_129___", "Your-API-KEY"); // Pass the list of pdf files to PrizmDoc Server ConversionResult result = await prizmDocServer.CombineToPdfAsync( new [] { new ConversionSourceDocument("A.pdf"), new ConversionSourceDocument("B.pdf"), new ConversionSourceDocument("C.pdf"), }); // Save merged file to the target location await result.RemoteWorkFile.SaveAsync("sample.pdf"); } $vbLabelText $csharpLabel 上述代码也创建了一个C.pdf文件组合在一起。 如何在使用IronPDF和PrizmDoc Viewer中添加页眉和页脚到PDF中?" 在这个比较中,假设存在一个简单的myWebPage.html,包含以下HTML和CSS: <html> <head> <style> li { font-size: x-large; color: rgba(156, 89, 13, 0.897); list-style: square; } </style> </head> <body> <h1 style="text-align: center;">Hello World..!</h1> <h1>Main Menu</h1> <ul> <li>SubMenu 1</li> <li>SubMenu 2</li> <li>SubMenu 3</li> <li>SubMenu 4</li> <li>SubMenu 5</li> </ul> </body> </html> <html> <head> <style> li { font-size: x-large; color: rgba(156, 89, 13, 0.897); list-style: square; } </style> </head> <body> <h1 style="text-align: center;">Hello World..!</h1> <h1>Main Menu</h1> <ul> <li>SubMenu 1</li> <li>SubMenu 2</li> <li>SubMenu 3</li> <li>SubMenu 4</li> <li>SubMenu 5</li> </ul> </body> </html> HTML 目标是将此WebPage转换为PDF文件,具有以下页眉和页脚属性: Page Title在页眉的左侧 DateTime在页眉的右侧 Page Number of Total Pages在页脚的右侧 首先,让我们检查IronPDF如何处理页眉和页脚。 IronPDF如何处理PDF页眉和页脚? 为了处理PDF文件的页眉和页脚,IronPDF在RenderingOptions,可以如下使用: 供标题: _CODEBLOCK19 页脚: _CODEBLOCK20 初始化TextHeaderFooter()时可以设置以下属性: CenterText将文本打印在页眉或页脚的中间 LeftText将文本打印在页眉或页脚的左侧 RightText将文本打印在页眉或页脚的右侧 DrawDividerLine绘制一条分隔页面内容与页眉或页脚的线 FontFamily指定页眉或页脚的字体家族 FontSize指定页眉或页脚的字体大小 Spacing调整页面内容与页眉或页脚之间的空间 以下预定义属性有助于设置页眉或页脚内容。 它们以花括号{ }编写: {page}在页眉或页脚中打印当前页码 {total-pages}在页眉或页脚中打印总页数 {url}在页眉或页脚中打印渲染页面的URL {date}在页眉或页脚中打印当前日期 {time}在页眉或页脚中打印当前时间 {html-title}在页眉或页脚中打印渲染网页的标题 {pdf-title}在页眉或页脚中打印文档标题 阅读更多关于使用IronPDF处理页眉和页脚的详细信息。 IronPDF还支持更多复杂设计的HTML页眉和页脚。 示例示范了如何根据用例实现并演示如何使用上述属性: using IronPdf; static void Main(string[] args) { // Create rendering converter var converter = new ChromePdfRenderer(); // Setting Header properties converter.RenderingOptions.TextHeader = new TextHeaderFooter() { DrawDividerLine = true, LeftText = "Page Title", RightText = "{date} {time}", FontSize = 13 }; // Setting footer properties converter.RenderingOptions.TextFooter = new TextHeaderFooter() { RightText = "Page {page} of {total-pages}", FontSize = 12 }; // Specify the file to be converted using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html"); // Save to target location PDF.SaveAs("sample.pdf"); } using IronPdf; static void Main(string[] args) { // Create rendering converter var converter = new ChromePdfRenderer(); // Setting Header properties converter.RenderingOptions.TextHeader = new TextHeaderFooter() { DrawDividerLine = true, LeftText = "Page Title", RightText = "{date} {time}", FontSize = 13 }; // Setting footer properties converter.RenderingOptions.TextFooter = new TextHeaderFooter() { RightText = "Page {page} of {total-pages}", FontSize = 12 }; // Specify the file to be converted using var PDF = converter.RenderHTMLFileAsPdf("myWebPage.html"); // Save to target location PDF.SaveAs("sample.pdf"); } $vbLabelText $csharpLabel 输出:上述代码创建的PDF文件sample.pdf的新截图: 使用IronPDF处理页眉和页脚涉及直观语言,同时创建PDF文件。 现在,示例显示PrizmDoc Viewer如何处理页眉和页脚。 PrizmDoc Viewer如何处理PDF页眉和页脚? PrizmDoc Viewer提供了HeaderFooterOptions类来处理页眉和页脚,具有以下属性: Lines指定页眉和页脚的行,每一行具有以下属性: Left 在页眉或页脚行的左侧打印文本 Center 在页眉或页脚行的中间打印文本 Right 在页眉或页脚行的右侧打印文本 FontFamily指定页眉或页脚文本的字体系列 FontSize指定页眉或页脚文本的字体大小 Color指定页眉或页脚文本的颜色 阅读更多关于使用PrizmDoc服务器设置PDF页面的页眉和页脚。 示例展示了如何使用上述属性实现用例: using System.Threading.Tasks; using System.Collections.Generic; using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { SetHeaderFooter().GetAwaiter().GetResult(); } private static async Task SetHeaderFooter() { // Instantiate PrizmDocServerClient object with Header and footer properties var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY"); ConversionResult result = await prizmDocServer.ConvertToPdfAsync( "myWebPage.html", header: new HeaderFooterOptions { Lines = new List<HeaderFooterLine> { new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() } }, }, footer: new HeaderFooterOptions { Lines = new List<HeaderFooterLine> { new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" }, }, }); // Save to the target location await result.RemoteWorkFile.SaveAsync("sample.pdf"); } using System.Threading.Tasks; using System.Collections.Generic; using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { SetHeaderFooter().GetAwaiter().GetResult(); } private static async Task SetHeaderFooter() { // Instantiate PrizmDocServerClient object with Header and footer properties var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_130___", "Your-API-KEY"); ConversionResult result = await prizmDocServer.ConvertToPdfAsync( "myWebPage.html", header: new HeaderFooterOptions { Lines = new List<HeaderFooterLine> { new HeaderFooterLine { Left = "Page Title", Right = DateTime.Now.ToString() } }, }, footer: new HeaderFooterOptions { Lines = new List<HeaderFooterLine> { new HeaderFooterLine { Right = "Page {{pageNumber}} of {{pageCount}}" }, }, }); // Save to the target location await result.RemoteWorkFile.SaveAsync("sample.pdf"); } $vbLabelText $csharpLabel 输出: 上述代码创建的新PDF文件的截图: 哪个库为页眉和页脚提供更多灵活性? IronPDF提供了更多的功能来设置页眉和页脚属性,并且与PrizmDoc Viewer相比,编程结构更加简单。 IronPDF生成的PDF文件也比PrizmDoc Viewer生成的文件更易读,更吸引人。IronPDF还支持页码和分页符以改进文档控制。 如何在使用IronPDF和PrizmDoc Viewer中将PDF页面转换为图像的比较中?" 在这个比较中,假设您有一个名为Sample_PDF.pdf的简单PDF文件,共有两页。 第1页 第2页 任务是为每个页面创建一个图像。 首先,示例将看看如何使用IronPDF执行此任务。 IronPDF如何将PDF页面转换为图像? using IronPdf; static void Main(string[] args) { // Specify file to be converted var pdf = PdfDocument.FromFile("Sample_PDF.pdf"); // Save images to the target location pdf.RasterizeToImageFiles("image_*.png"); } using IronPdf; static void Main(string[] args) { // Specify file to be converted var pdf = PdfDocument.FromFile("Sample_PDF.pdf"); // Save images to the target location pdf.RasterizeToImageFiles("image_*.png"); } $vbLabelText $csharpLabel IronPDF还支持将图像保存到内存流,并支持包括JPEG、TIFF等不同的图像格式。 输出: 上述代码创建了以下两个.png图像: 第 1 页 图片 第 2 页 图片 使用IronPDF将PDF页面转换为图像是简单的。 现在,让我们使用PrizmDoc Viewer执行相同的任务。 PrizmDoc Viewer如何将PDF页面转换为图像? using System.Linq; using System.Collections.Generic; using System.Threading.Tasks; using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { PdfToImage().GetAwaiter().GetResult(); } private static async Task PdfToImage() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY"); // Convert PDF file to images IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png); // Save each image. for (int i = 0; i < results.Count(); i++) { await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png"); } } using System.Linq; using System.Collections.Generic; using System.Threading.Tasks; using Accusoft.PrizmDocServer; using Accusoft.PrizmDocServer.Conversion; static void Main(string[] args) { PdfToImage().GetAwaiter().GetResult(); } private static async Task PdfToImage() { // Instantiate PrizmDocServerClient object var prizmDocServer = new PrizmDocServerClient("___PROTECTED_URL_131___", "Your-API-KEY"); // Convert PDF file to images IEnumerable<ConversionResult> results = await prizmDocServer.ConvertAsync("Sample_PDF.pdf", DestinationFileFormat.Png); // Save each image. for (int i = 0; i < results.Count(); i++) { await results.ElementAt(i).RemoteWorkFile.SaveAsync($"page-{i + 1}.png"); } } $vbLabelText $csharpLabel 输出: 上述代码也创建了以下两个.png图像: 第1页 第2页 哪个库使PDF到图像的转换更简单? 与PrizmDoc Viewer相比,IronPDF允许开发人员轻松创建每个页面的图像,只需最少的代码行,甚至无需遍历页面。 我可以使用IronPDF与Bootstrap 5数据表吗? IronPDF的Chrome V8渲染引擎提供了对Bootstrap 5数据表的出色支持,使开发人员能够生成具有复杂表格布局的专业PDF报告。 此示例展示了渐变页眉、状态徽章、分页控件和摘要指标—这些功能突显了IronPDF相对于传统PDF查看器如PrizmDoc的优势。 IronPDF完全支持现代CSS功能,包括flexbox布局、渐变和响应式设计。 using IronPdf; var renderer = new ChromePdfRenderer(); string dataTableReport = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <link href='___PROTECTED_URL_132___ rel='stylesheet'> <style> .table-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; border-radius: 10px 10px 0 0; } .table-container { background: white; border-radius: 0 0 10px 10px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); overflow: hidden; } .table th { background: #f8f9fa; font-weight: 600; text-transform: uppercase; font-size: 0.85rem; letter-spacing: 0.5px; } .status-badge { padding: 0.35em 0.65em; border-radius: 0.25rem; font-weight: 600; font-size: 0.75rem; } .trend-positive { color: #198754; font-weight: 700; } .trend-negative { color: #dc3545; font-weight: 700; } @media print { .table-container { page-break-inside: avoid; } } </style> </head> <body class='bg-light'> <div class='container py-5'> <div class='table-container'> <div class='table-header'> <div class='row align-items-center'> <div class='col-md-8'> <h2 class='mb-2'>Sales Performance Report</h2> <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p> </div> <div class='col-md-4 text-end'> <div class='btn-group btn-group-sm'> <button class='btn btn-light'>Export</button> <button class='btn btn-light'>Filter</button> <button class='btn btn-light'>Sort</button> </div> </div> </div> </div> <div class='p-4'> <div class='row mb-3'> <div class='col-md-4'> <input type='text' class='form-control form-control-sm' placeholder='Search regions...'> </div> <div class='col-md-8 text-end'> <span class='text-muted small'>Showing 1-10 of 48 results</span> </div> </div> <div class='table-responsive'> <table class='table table-hover align-middle'> <thead> <tr> <th>Region</th> <th>Revenue</th> <th>Units Sold</th> <th>Growth</th> <th>Status</th> <th>Action</th> </tr> </thead> <tbody> <tr> <td> <strong>North America</strong><br> <small class='text-muted'>USA, Canada, Mexico</small> </td> <td>$4,280,000</td> <td>12,450</td> <td><span class='trend-positive'>↑ 18.5%</span></td> <td><span class='status-badge bg-success text-white'>Exceeding</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Europe</strong><br> <small class='text-muted'>EU, UK, Switzerland</small> </td> <td>$3,650,000</td> <td>10,890</td> <td><span class='trend-positive'>↑ 12.3%</span></td> <td><span class='status-badge bg-success text-white'>On Track</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Asia Pacific</strong><br> <small class='text-muted'>Japan, Australia, Singapore</small> </td> <td>$2,940,000</td> <td>8,320</td> <td><span class='trend-positive'>↑ 24.7%</span></td> <td><span class='status-badge bg-primary text-white'>Growing</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Latin America</strong><br> <small class='text-muted'>Brazil, Argentina, Chile</small> </td> <td>$1,580,000</td> <td>4,670</td> <td><span class='trend-positive'>↑ 8.9%</span></td> <td><span class='status-badge bg-info text-white'>Stable</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Middle East</strong><br> <small class='text-muted'>UAE, Saudi Arabia, Israel</small> </td> <td>$980,000</td> <td>2,890</td> <td><span class='trend-negative'>↓ 3.2%</span></td> <td><span class='status-badge bg-warning text-dark'>Review</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> </tbody> <tfoot class='table-light'> <tr> <td><strong>Total</strong></td> <td><strong>$13,430,000</strong></td> <td><strong>39,220</strong></td> <td><strong class='trend-positive'>↑ 14.8%</strong></td> <td colspan='2'></td> </tr> </tfoot> </table> </div> <div class='d-flex justify-content-between align-items-center mt-4'> <div> <select class='form-select form-select-sm' style='width: auto; display: inline-block;'> <option>10 per page</option> <option>25 per page</option> <option>50 per page</option> </select> </div> <nav> <ul class='pagination pagination-sm mb-0'> <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li> <li class='page-item active'><a class='page-link' href='#'>1</a></li> <li class='page-item'><a class='page-link' href='#'>2</a></li> <li class='page-item'><a class='page-link' href='#'>3</a></li> <li class='page-item'><a class='page-link' href='#'>Next</a></li> </ul> </nav> </div> </div> </div> <div class='row g-3 mt-4'> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-primary mb-1'>$13.4M</h3> <small class='text-muted'>Total Revenue</small> </div> </div> </div> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-success mb-1'>39,220</h3> <small class='text-muted'>Units Sold</small> </div> </div> </div> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-info mb-1'>14.8%</h3> <small class='text-muted'>Growth Rate</small> </div> </div> </div> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-warning mb-1'>5</h3> <small class='text-muted'>Active Regions</small> </div> </div> </div> </div> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(dataTableReport); pdf.SaveAs("data-table-report.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); string dataTableReport = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <link href='___PROTECTED_URL_132___ rel='stylesheet'> <style> .table-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 30px; border-radius: 10px 10px 0 0; } .table-container { background: white; border-radius: 0 0 10px 10px; box-shadow: 0 10px 30px rgba(0,0,0,0.1); overflow: hidden; } .table th { background: #f8f9fa; font-weight: 600; text-transform: uppercase; font-size: 0.85rem; letter-spacing: 0.5px; } .status-badge { padding: 0.35em 0.65em; border-radius: 0.25rem; font-weight: 600; font-size: 0.75rem; } .trend-positive { color: #198754; font-weight: 700; } .trend-negative { color: #dc3545; font-weight: 700; } @media print { .table-container { page-break-inside: avoid; } } </style> </head> <body class='bg-light'> <div class='container py-5'> <div class='table-container'> <div class='table-header'> <div class='row align-items-center'> <div class='col-md-8'> <h2 class='mb-2'>Sales Performance Report</h2> <p class='mb-0 opacity-75'>Q4 2024 Regional Analysis</p> </div> <div class='col-md-4 text-end'> <div class='btn-group btn-group-sm'> <button class='btn btn-light'>Export</button> <button class='btn btn-light'>Filter</button> <button class='btn btn-light'>Sort</button> </div> </div> </div> </div> <div class='p-4'> <div class='row mb-3'> <div class='col-md-4'> <input type='text' class='form-control form-control-sm' placeholder='Search regions...'> </div> <div class='col-md-8 text-end'> <span class='text-muted small'>Showing 1-10 of 48 results</span> </div> </div> <div class='table-responsive'> <table class='table table-hover align-middle'> <thead> <tr> <th>Region</th> <th>Revenue</th> <th>Units Sold</th> <th>Growth</th> <th>Status</th> <th>Action</th> </tr> </thead> <tbody> <tr> <td> <strong>North America</strong><br> <small class='text-muted'>USA, Canada, Mexico</small> </td> <td>$4,280,000</td> <td>12,450</td> <td><span class='trend-positive'>↑ 18.5%</span></td> <td><span class='status-badge bg-success text-white'>Exceeding</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Europe</strong><br> <small class='text-muted'>EU, UK, Switzerland</small> </td> <td>$3,650,000</td> <td>10,890</td> <td><span class='trend-positive'>↑ 12.3%</span></td> <td><span class='status-badge bg-success text-white'>On Track</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Asia Pacific</strong><br> <small class='text-muted'>Japan, Australia, Singapore</small> </td> <td>$2,940,000</td> <td>8,320</td> <td><span class='trend-positive'>↑ 24.7%</span></td> <td><span class='status-badge bg-primary text-white'>Growing</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Latin America</strong><br> <small class='text-muted'>Brazil, Argentina, Chile</small> </td> <td>$1,580,000</td> <td>4,670</td> <td><span class='trend-positive'>↑ 8.9%</span></td> <td><span class='status-badge bg-info text-white'>Stable</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> <tr> <td> <strong>Middle East</strong><br> <small class='text-muted'>UAE, Saudi Arabia, Israel</small> </td> <td>$980,000</td> <td>2,890</td> <td><span class='trend-negative'>↓ 3.2%</span></td> <td><span class='status-badge bg-warning text-dark'>Review</span></td> <td><button class='btn btn-sm btn-outline-primary'>Details</button></td> </tr> </tbody> <tfoot class='table-light'> <tr> <td><strong>Total</strong></td> <td><strong>$13,430,000</strong></td> <td><strong>39,220</strong></td> <td><strong class='trend-positive'>↑ 14.8%</strong></td> <td colspan='2'></td> </tr> </tfoot> </table> </div> <div class='d-flex justify-content-between align-items-center mt-4'> <div> <select class='form-select form-select-sm' style='width: auto; display: inline-block;'> <option>10 per page</option> <option>25 per page</option> <option>50 per page</option> </select> </div> <nav> <ul class='pagination pagination-sm mb-0'> <li class='page-item disabled'><a class='page-link' href='#'>Previous</a></li> <li class='page-item active'><a class='page-link' href='#'>1</a></li> <li class='page-item'><a class='page-link' href='#'>2</a></li> <li class='page-item'><a class='page-link' href='#'>3</a></li> <li class='page-item'><a class='page-link' href='#'>Next</a></li> </ul> </nav> </div> </div> </div> <div class='row g-3 mt-4'> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-primary mb-1'>$13.4M</h3> <small class='text-muted'>Total Revenue</small> </div> </div> </div> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-success mb-1'>39,220</h3> <small class='text-muted'>Units Sold</small> </div> </div> </div> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-info mb-1'>14.8%</h3> <small class='text-muted'>Growth Rate</small> </div> </div> </div> <div class='col-md-3'> <div class='card text-center'> <div class='card-body'> <h3 class='text-warning mb-1'>5</h3> <small class='text-muted'>Active Regions</small> </div> </div> </div> </div> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(dataTableReport); pdf.SaveAs("data-table-report.pdf"); $vbLabelText $csharpLabel 该代码会生成一份复杂的数据表格报告,其中包含渐变标题、响应式表格、状态徽章和汇总指标。 IronPDF的Chrome渲染引擎保留了所有Bootstrap样式,包括表格悬停效果、徽章颜色和分页控件—这些能力超越了传统的PDF查看器。 该引擎还支持JavaScript渲染以实现动态内容、 自定义字体和UTF-8国际字符。 与PrizmDoc Viewer相比的主要优势: 无需转换即可直接呈现 HTML 表格 完全支持 Bootstrap 组件 渐变背景和现代 CSS 具有适当分页的响应式表格布局 支持复杂的JavaScript图表 打印媒体CSS处理 有关Bootstrap PDF生成的更多详细信息,请参阅完整的渲染文档。 开发人员还可以探索Angular到PDF转换及其他JavaScript框架支持。## IronPDF和PrizmDoc Viewer的许可证成本如何比较? 在审查了两个组件的技术结构和可用功能后,以下概括了许可证定价。 这非常重要,因为开发人员希望在预算限制内满足需求。 IronPDF的许可证选项有哪些? IronPDF的许可证从单个项目的一个开发人员$699起。 IronPDF提供灵活的许可选项,包括开发许可、部署许可和扩展选项以获取持续的支持和更新。 对于服务于多个客户的公司或代理商的开发者而言,许可证的起价为$699,并可根据团队规模和项目数量进行调整。 随着需求的发展,IronPDF提供许可证升级路径。 以下许可证需要一次性付款: 开发人员数量 价格 1-5 $699 6-10 $799 11-20 $899 21-50 $1,199 无限 $1,199 对于拥有多个地点的公司,许可证起价为$1199 对于SaaS服务,许可证起价为$1099 对于免版税的OEM再分发,许可证起价为$1599 注意:上述所有许可证套餐均包括1年支持和更新。 了解更多关于IronPDF的所有可用许可证套餐。 开发者还可以通过多种方式应用许可证密钥,包括Web.config和环境变量。 PrizmDoc查看器的许可证选项有哪些? What Is the Cost of Self-Hosted PrizmDoc? 对于自管理服务器,许可证价格为$7,900每年,包括标准支持。 了解更多关于PrizmDoc查看器的所有可用套餐。 How Much Does Cloud-Based PrizmDoc Cost? 此许可证涵盖云端的PrizmDoc查看器服务,根据交易数量进行扩展。 术语: PrizmDoc查看器服务器发送请求并接收输出(生成的文档)。 预付费桶意指一次性支付并获得不失效的交易。 交易数量 预付费桶 每月 每年 200 $18 1,000 $89 2,000 $119 6,000 $254 $169 1,859 美元(6,000 笔交易/月) 12,000 $434 $289 3,179 美元(12,000 笔交易/月) 25,000 $699 $499 5,459 美元(25,000 笔交易/月) 50,000 $1,199 $799 8,789 美元(50,000 笔交易/月) 100,000 $1,199 $1,199 10,989 美元(100,000 笔交易/月) 200,000 $2,549 $1,699 19,188 美元(200,000 笔交易/月) 300,000 $3,299 $2,199 $25,188(300,000次交易/月) 400,000 $4,049 $2,699 31,188 美元(400,000 笔交易/月) 500,000 $4,799 $3,199 37,188 美元(每月 500,000 笔交易) 教程快速访问 ### 获取 C# IronPDF 快速入门手册 一份免费的PDF资源指南,简化了为.NET开发PDF的过程,其中包含常用功能的演示以及用于项目中在C#和VB.NET中操作、编辑、生成和保存PDF的示例。 下载指南 ### 探索 IronPDF API 参考资料 探索IronPDF C#库的API参考,其中包括IronPDF的所有功能、类、方法字段、命名空间和枚举的详细信息。 查看 API 参考 请注意Accusoft的PrizmDoc查看器是其相关所有者的注册商标。 本网站与Accusoft的PrizmDoc查看器没有关联、认可或赞助关系。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。)}] 常见问题解答 如何在C#中将HTML转换为PDF? 你可以使用IronPDF的RenderHtmlAsPdf方法将HTML字符串转换为PDF。你还可以使用RenderHtmlFileAsPdf将HTML文件转换为PDF。 使用IronPDF进行PDF转换比PrizmDoc Viewer有什么优势? IronPDF提供了一种简单的本地PDF渲染解决方案,支持离线工作而不需要异步编程。而PrizmDoc Viewer通过REST API运行,需要互联网连接以进行远程服务器交互。 我可以使用PDF库合并多个PDF文档吗? 可以,使用IronPDF,你可以使用MergePdf方法合并多个PDF,实现无缝结合的文件。 IronPDF如何处理PDF到图像的转换? IronPDF允许你使用内置方法轻松将PDF页面转换为图像,提供了比其他软件更简化的方法。 IronPDF中的页眉和页脚自定义选项有哪些? IronPDF提供了广泛的功能,以简单的编程结构设置页眉和页脚属性,使自定义文档变得容易。 IronPDF适用于离线PDF处理吗? 是的,IronPDF支持离线PDF处理,这意味着你可以在没有互联网连接的情况下工作,与一些需要远程服务器交互的解决方案不同。 IronPDF许可证的成本结构是什么? IronPDF许可证起价为699美元,用于一个项目的单一开发人员,提供可扩展的公司和SaaS服务选项,提供了一种具有成本效益的一次性付款方案。 我可以免费使用IronPDF进行开发吗? 可以,IronPDF开发免费且无时间限制,并提供30天的部署试用期以便你的项目上线。 PrizmDoc Viewer如何处理HTML到PDF的转换? PrizmDoc Viewer使用REST API进行HTML到PDF的转换,需要异步编程和互联网连接来进行远程服务器交互。 托管PrizmDoc服务器的系统要求是什么? 自托管PrizmDoc服务器需要至少32 GB RAM和4核CPU,以满足其处理需求。 IronPDF 是否完全兼容 .NET 10? 是的。IronPDF 支持 .NET 10(以及 .NET 9、8、7、6、.NET Core、.NET Standard 和 .NET Framework)。它通过 NuGet 安装,可在 Windows、Linux 和 macOS 上运行,并使用其基于 Chrome 的原生渲染器,在 .NET 10 应用程序中提供像素级精准的 HTML 转 PDF 渲染效果。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新2026年3月1日 在ASP.NET MVC中生成PDF:iTextSharp vs. IronPDF指南 使用 iTextSharp 与 IronPDF for .NET 比较 ASP.NET MVC 中的 PDF 生成方法。了解哪个库能提供更好的 HTML 渲染和更简便的实施。 阅读更多 已更新2026年2月1日 Ghostscript GPL 与 IronPDF:技术比较指南 了解 Ghostscript GPL 和 IronPDF 的主要区别。比较 AGPL 许可与商业许可、命令行开关与本地 .NET API 以及 HTML 到 PDF 的功能。 阅读更多 已更新2026年3月1日 ASP PDF 库:比较 IronPDF、Aspose 和 Syncfusion 发现适合ASP.NET Core应用程序的最佳PDF库。比较IronPDF的Chrome引擎与Aspose和Syncfusion的替代品。 阅读更多 PDFSharp HTML 到 PDF 示例和教程比较IronPDF与PDFCrowd之间的比较
已更新2026年3月1日 在ASP.NET MVC中生成PDF:iTextSharp vs. IronPDF指南 使用 iTextSharp 与 IronPDF for .NET 比较 ASP.NET MVC 中的 PDF 生成方法。了解哪个库能提供更好的 HTML 渲染和更简便的实施。 阅读更多
已更新2026年2月1日 Ghostscript GPL 与 IronPDF:技术比较指南 了解 Ghostscript GPL 和 IronPDF 的主要区别。比较 AGPL 许可与商业许可、命令行开关与本地 .NET API 以及 HTML 到 PDF 的功能。 阅读更多
已更新2026年3月1日 ASP PDF 库:比较 IronPDF、Aspose 和 Syncfusion 发现适合ASP.NET Core应用程序的最佳PDF库。比较IronPDF的Chrome引擎与Aspose和Syncfusion的替代品。 阅读更多