产品比较 IronPDF vs ExpertPDF:高级.NET开发者应该选择哪个C# PDF库? Curtis Chau 已更新:2026年1月25日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 IronPDF在使用Chrome V8引擎进行HTML到PDF的转换方面表现出色,并且提供直观的API,而ExpertPDF则为.NET生产系统提供基本的PDF功能,但配置要求更复杂。 C#开发人员在处理PDF时常常面临挑战,无论是读取、写入、创建还是格式之间的转换。 许多库已经出现,以满足这些需求,为C#应用程序提供平滑的集成。 在开发C# PDF报告时,选择合适的库对开发时间和输出质量有重要影响。 对于完整的C#中PDF生成,了解库的能力至关重要。 本文对比了两款.NET开发人员使用的PDF库: IronPDF ExpertPDF 这两个库都提供了在.NET环境中生成、转换和编辑PDF的方法。 关键考虑因素在于确定哪个库最能满足特定项目需求。 此分析突出了基本特征,以辅助决策。 无论是实现HTML到PDF转换,PDF编辑功能还是文档组织功能,选择合适的库至关重要。 什么是IronPDF库? IronPDF提供了一套完整的.NET PDF解决方案,特别对C#开发人员有帮助。 该库可以在C#应用程序中实现所有必要的PDF功能。 支持Azure部署和AWS Lambda,该库适合云原生架构。 开发人员可从优秀的Windows支持、Linux部署和macOS兼容性中获益。 安装概述提供了完整的设置指导。 IronPDF整合了一个.NET Chromium引擎,将HTML内容渲染为PDF,简化了文档设计,而无需复杂的API。HTML到PDF转换器使用HTML5、CSS、JavaScript和图像创建文档。 此外,开发人员可以编辑PDF、添加页眉和页脚,以及提取图像。 该库通过可靠的文本提取功能简化了文本读取。 对于生产环境,Chrome渲染引擎确保了准确渲染。 IronPDF 的主要功能是什么? 如何从HTML创建PDF文件? 从HTML、CSS和JavaScript创建PDF 从网站URL生成文档 使用凭证和HTTP头加载URL 支持响应式CSS和媒体类型 配合JavaScript执行和渲染延迟 如何无需Adobe Acrobat Reader编辑PDF? 填写和读取PDF表单 使用解析提取文本和图像 在现有页面上标记HTML内容 添加HTML页眉/页脚或基于文本的页眉 添加注释和数字签名 如何操作PDF文档? 从内存流加载和解析 合并和拆分文档内容 添加水印、背景、文本和资产 使用页面旋转来管理PDF页面 应用变换并操作DOM对象 可以转换哪些文件格式为PDF? 使用最少代码转换ASPX WebForms 转换HTML文件和HTML ZIP档案 图片转换为PDF (PNG, JPG, GIF, TIFF) 使用格式支持Markdown转PDF DOCX转PDF和XML转PDF 如何保存和打印PDF? 保存为二进制数据或内存流 打印CSS媒体类型 将PDF转换为打印文档对象 支持PDF/A合规和PDF/UA可访问性 导出不同的PDF版本和线性化PDF 什么是ExpertPDF? 访问ExpertPDF官方网站以探索他们的.NET库提供的HTML到PDF转换。 该库无需复杂的报告软件即可生成PDF报告。 对于寻求完整文档和API参考的开发人员,考虑使用IronPDF而非ExpertPDF,以获得更丰富的资源。 ExpertPDF提供简明的PDF编辑功能。 HTML到PDF转换器可快速集成到.NET应用程序中。 兼容.NET Framework、.NET Core、.NET 5和.NET 6,但缺乏Linux部署和macOS支持。 对于容器化部署,IronPDF提供Docker支持,而ExpertPDF不提供。 IronPDF还支持远程容器部署和本地与远程引擎选项。 此库可在.NET应用程序中从网页URL或原始HTML标记创建PDF。 对于高级场景,如渲染WebGL网站或JavaScript密集型应用程序,IronPDF提供了卓越的渲染能力。 快速入门指南帮助开发人员快速开始。 ExpertPDF的主要功能是什么? 显著功能包括: 将URL网页转换为PDF 将HTML字符串转换为PDF 多种输出文件选项 设置页面边距和大小 设置页眉和页脚 添加自动和自定义分页符 将特定网页部分转换为PDF 在转换过程中隐藏元素 将多个网页合并为单个PDF 转换经过身份验证的网页为PDF 选择CSS媒体类型进行渲染 书签支持 数字签名支持 检索PDF中的HTML元素位置 支持HTML5/CSS3 支持网络字体 文件类型转换: PDF 到文本转换器 HTML 到 PDF 转换器 HTML 到图像转换器 PDF 到图像转换器 RTF 到 PDF 转换器 以下部分涵盖: 创建控制台项目 IronPDF 安装 ExpertPDF \u5b89\u88c5 从 URL 创建 PDF 从 HTML 输入字符串创建 PDF 将多个PDF合并为一个PDF 将图像转换为 PDF 许可和定价 结论 如何创建控制台项目? 按以下步骤使用Visual Studio 2022创建控制台应用程序: 打开 Visual Studio 2022 并点击创建新项目 选择 C# 控制台应用并单击下一步 输入项目名称并点击下一步 选择.NET Framework版本(使用最新的6.0) 控制台项目已创建并准备好进行库测试。 两个库在使用前都需要安装。 请参考快速入门指南了解更多详情。 概述文档提供完整信息。 如何安装 IronPDF? 提供多种安装方法: 使用 Visual Studio 直接下载 NuGet 包 下载 IronPDF .DLL 库 请参考安装概述了解更多详情。 该库支持Windows安装程序进行系统范围的部署。 高级选项包括NuGet安装和使用许可证密钥。 如何使用Visual Studio进行安装? Visual Studio提供了NuGet包管理器用于安装包: 通过项目菜单工具访问,或 在解决方案资源管理器中右键单击项目 浏览并安装IronPDF NuGet包。 请参考NuGet安装指南了解更多详情。 平台特定指南包括Android集成、F#开发和VB.NET使用。 如需故障解决,请参阅NuGet包部署失败指南。 如何直接下载NuGet包? 从NuGet网站下载IronPDF: 访问NuGet IronPDF包 选择"下载包" 双击下载的软件包 包自动安装 重新加载Visual Studio 如何下载和安装IronPDF DLL? 从IronPDF网站直接下载IronPDF .DLL。 点击下载IronPDF DLL。 在项目中引用IronPDF: 在解决方案资源管理器中右键单击解决方案 选择"添加引用" 浏览IronPDF.dll库 点击确定 IronPDF安装完成。 有关额外选项,包括Docker部署和远程引擎设置,请参考安装概述。 如需故障排除,请参阅快速故障排除指南或探索初次渲染性能和GPU进程优化。 运行时文件夹指南有助于依赖管理。 如何安装ExpertPDF? 有两种安装方法: 使用Visual Studio NuGet包管理器 下载程序集(较旧的.NET版本) 使用NuGet包管理器为现代.NET框架安装ExpertPDF。 考虑使用IronPDF代替ExpertPDF,可通过高级安装方法和包体积优化获得更大的灵活性。 如何使用Visual Studio NuGet包管理器进行安装? 访问NuGet包管理器: 项目菜单工具 在解决方案资源管理器中右键单击项目 浏览并安装ExpertPDF NuGet包。 为改进设置,请考虑IronPDF的使用声明指南。 注意:ExpertPDF仅支持Windows,而IronPDF支持Windows、Linux和macOS。 对于云部署,IronPDF提供Azure集成和AWS Lambda支持。 IronPDF提供完整的性能优化和内存管理指导。 对于特定平台,请参阅红帽企业Linux支持和AWS Lambda在Amazon Linux 2平台上。 如何从URL创建PDF? 两个库都能将HTML转换为PDF。 请参考URL转PDF指南了解更多详情。 复杂网站可能需要自定义渲染延迟或JavaScript执行处理。 对于经过身份验证的网站,请参阅TLS网站和系统登录指南。 IronPDF使用Chrome渲染实现像素级精准HTML到PDF转换。 IronPDF如何将URL转换为PDF? IronPDF高效地将URL中的HTML渲染为PDF。 该库为CSS、JavaScript、图像和表单提供高级支持。 使用Chrome渲染引擎确保像素级精准HTML到PDF转换。 如有渲染问题,请参阅像素级精准HTML格式化指南。 高级渲染选项包括自定义纸张尺寸和视图配置。 JavaScript消息侦听器支持动态内容处理。 此代码示例展示了IronPDF如何让开发人员从网站URL创建PDF。 // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the specified URL as a PDF var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_190___"); // Save the rendered PDF to a file pdf.SaveAs("url.pdf"); // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render the specified URL as a PDF var pdf = renderer.RenderUrlAsPdf("___PROTECTED_URL_190___"); // Save the rendered PDF to a file pdf.SaveAs("url.pdf"); $vbLabelText $csharpLabel 对于经过身份验证的URL,请参阅TLS网站和系统登录指南。 为经过身份验证的请求配置cookie和自定义HTTP头。 安全站点可能需要Kerberos身份验证。 进行调试时,请使用Chrome调试指南。 其他示例显示将URL转换为PDF。 ExpertPDF如何将URL转换为PDF? ExpertPDF使用savePdfFromUrlToFile方法转换URL,保留页面格式: // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save a webpage URL directly to a PDF file pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf"); // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save a webpage URL directly to a PDF file pdfConverter.SavePdfFromUrlToFile("___PROTECTED_URL_191___", "output.pdf"); $vbLabelText $csharpLabel 幕后,IronPDF利用其Chrome渲染引擎提供更好的HTML5和CSS3支持。 如何从HTML输入字符串创建PDF? 两个库都可从HTML字符串创建PDF。 请参考HTML字符串到PDF指南了解更多详情。 使用适用于屏幕和打印的CSS并包含网络字体和图标字体。 IronPDF提供出色的Bootstrap和Flexbox CSS支持。 使用HTML创建PDF示例展示了实际的实现。 IronPDF如何将HTML字符串转换为PDF? 此代码示例展示了IronPDF如何让开发人员从HTML字符串生成PDF文档: // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render a PDF from HTML string and save it var pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>"); pdfDoc1.SaveAs("pixel-perfect.pdf"); // Render HTML with external assets and save it var pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\"); pdfDoc2.SaveAs("html-with-assets.pdf"); // Import the IronPdf library using IronPdf; // Initialize a new renderer ChromePdfRenderer renderer = new ChromePdfRenderer(); // Render a PDF from HTML string and save it var pdfDoc1 = renderer.RenderHtmlAsPdf("<h1>Html with CSS and Images</h1>"); pdfDoc1.SaveAs("pixel-perfect.pdf"); // Render HTML with external assets and save it var pdfDoc2 = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\"); pdfDoc2.SaveAs("html-with-assets.pdf"); $vbLabelText $csharpLabel IronPDF支持基础URL用于相对路径和DataURIs用于嵌入图像。 对于复杂的HTML,请参考HTML文件到PDF指南。 对于特定的视图端口,请参考视图和缩放设置指南。该库无缝处理国际语言和UTF-8。 高级功能包括HTML渲染设置和响应式HTML到PDF转换。 ExpertPDF如何将HTML字符串转换为PDF? ExpertPDF HTML To PDF转换器支持HTML字符串转换: // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save an HTML string to a PDF file pdfConverter.SavePdfFromHtmlStringToFile("<h1>PDF using Expert PDF</h1>", "html-to-pdf.pdf"); // Import the ExpertPdf.HtmlToPdf namespace using ExpertPdf.HtmlToPdf; // Initialize a new PdfConverter PdfConverter pdfConverter = new PdfConverter(); // Use PdfConverter to save an HTML string to a PDF file pdfConverter.SavePdfFromHtmlStringToFile("<h1>PDF using Expert PDF</h1>", "html-to-pdf.pdf"); $vbLabelText $csharpLabel 第一个参数指定HTML字符串,第二个指定输出文件名。 考虑使用IronPDF的Unicode和UTF-8支持,不再使用基本的HTML渲染,以获得更大的国际语言支持。 如何生成技术文档PDF? 技术文档可以从结构化布局和代码示例中获益。 此Bootstrap 5演示展示了IronPDF渲染具有语法高亮和警告的文档的能力。 请参考Bootstrap和Flexbox CSS支持指南了解更多详情。 IronPDF支持字体管理和字体字距调整以提供专业排版。 为获得更好的结果,请查看字体故障排除指南和国际语言支持。 using IronPdf; var renderer = new ChromePdfRenderer(); string technicalDocs = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <link href='___PROTECTED_URL_192___ rel='stylesheet'> <style> .code-block { background: #f8f9fa; border-left: 3px solid #0d6efd; padding: 15px; border-radius: 4px; } .api-method { font-family: 'Courier New', monospace; color: #0d6efd; } @media print { .card, .alert { page-break-inside: avoid; } } </style> </head> <body class='bg-light'> <div class='container py-4'> <div class='card shadow-sm mb-4'> <div class='card-header bg-dark text-white'> <h2 class='mb-0'>API Reference - HTML to PDF Conversion</h2> </div> <div class='card-body'> <h4>RenderHtmlAsPdf() Method</h4> <p class='lead'>Converts HTML content to PDF with full CSS3 and JavaScript support.</p> <div class='code-block mb-3'> <code class='api-method'>PdfDocument RenderHtmlAsPdf(string htmlContent)</code> </div> <div class='row mt-4'> <div class='col-md-6'> <h5 class='text-primary'>Parameters</h5> <table class='table table-sm table-bordered'> <tr> <td><code>htmlContent</code></td> <td>String containing HTML to convert</td> </tr> </table> </div> <div class='col-md-6'> <h5 class='text-success'>Returns</h5> <table class='table table-sm table-bordered'> <tr> <td><code>PdfDocument</code></td> <td>Generated PDF document object</td> </tr> </table> </div> </div> </div> </div> <div class='row g-3 mb-4'> <div class='col-md-4'> <div class='alert alert-success mb-0'> <h6 class='alert-heading'>✓ Supported Features</h6> <ul class='mb-0 small'> <li>HTML5 semantic tags</li> <li>CSS3 with Flexbox/Grid</li> <li>JavaScript execution</li> <li>External stylesheets</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-info mb-0'> <h6 class='alert-heading'>ⓘ Rendering Engine</h6> <ul class='mb-0 small'> <li>Chrome V8 Engine</li> <li>98% browser fidelity</li> <li>Sub-second rendering</li> <li>Async/await support</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-warning mb-0'> <h6 class='alert-heading'>⚠ ExpertPDF Notes</h6> <ul class='mb-0 small'> <li>Complex API structure</li> <li>Limited CSS3 support</li> <li>No native JavaScript</li> <li>Requires configuration</li> </ul> </div> </div> </div> <div class='card shadow-sm'> <div class='card-header bg-primary text-white'> <h5 class='mb-0'>Code Example Comparison</h5> </div> <div class='card-body'> <div class='row'> <div class='col-md-6'> <h6 class='text-primary'>IronPDF (Simple)</h6> <div class='code-block'> <pre class='mb-0'><code>var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf");</code></pre> </div> <div class='badge bg-success mt-2'>3 Lines</div> </div> <div class='col-md-6'> <h6 class='text-warning'>ExpertPDF (Complex)</h6> <div class='code-block'> <pre class='mb-0'><code>var converter = new HtmlToPdfConverter(); converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; converter.NavigationTimeout = 60; byte[] result = converter.GetPdfBytesFromHtmlString(html); File.WriteAllBytes("output.pdf", result);</code></pre> </div> <div class='badge bg-warning text-dark mt-2'>5+ Lines</div> </div> </div> </div> <div class='card-footer text-muted'> <small><strong>Comparison:</strong> IronPDF provides a more intuitive API with less configuration overhead for common use cases.</small> </div> </div> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(technicalDocs); pdf.SaveAs("technical-documentation.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); string technicalDocs = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <link href='___PROTECTED_URL_192___ rel='stylesheet'> <style> .code-block { background: #f8f9fa; border-left: 3px solid #0d6efd; padding: 15px; border-radius: 4px; } .api-method { font-family: 'Courier New', monospace; color: #0d6efd; } @media print { .card, .alert { page-break-inside: avoid; } } </style> </head> <body class='bg-light'> <div class='container py-4'> <div class='card shadow-sm mb-4'> <div class='card-header bg-dark text-white'> <h2 class='mb-0'>API Reference - HTML to PDF Conversion</h2> </div> <div class='card-body'> <h4>RenderHtmlAsPdf() Method</h4> <p class='lead'>Converts HTML content to PDF with full CSS3 and JavaScript support.</p> <div class='code-block mb-3'> <code class='api-method'>PdfDocument RenderHtmlAsPdf(string htmlContent)</code> </div> <div class='row mt-4'> <div class='col-md-6'> <h5 class='text-primary'>Parameters</h5> <table class='table table-sm table-bordered'> <tr> <td><code>htmlContent</code></td> <td>String containing HTML to convert</td> </tr> </table> </div> <div class='col-md-6'> <h5 class='text-success'>Returns</h5> <table class='table table-sm table-bordered'> <tr> <td><code>PdfDocument</code></td> <td>Generated PDF document object</td> </tr> </table> </div> </div> </div> </div> <div class='row g-3 mb-4'> <div class='col-md-4'> <div class='alert alert-success mb-0'> <h6 class='alert-heading'>✓ Supported Features</h6> <ul class='mb-0 small'> <li>HTML5 semantic tags</li> <li>CSS3 with Flexbox/Grid</li> <li>JavaScript execution</li> <li>External stylesheets</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-info mb-0'> <h6 class='alert-heading'>ⓘ Rendering Engine</h6> <ul class='mb-0 small'> <li>Chrome V8 Engine</li> <li>98% browser fidelity</li> <li>Sub-second rendering</li> <li>Async/await support</li> </ul> </div> </div> <div class='col-md-4'> <div class='alert alert-warning mb-0'> <h6 class='alert-heading'>⚠ ExpertPDF Notes</h6> <ul class='mb-0 small'> <li>Complex API structure</li> <li>Limited CSS3 support</li> <li>No native JavaScript</li> <li>Requires configuration</li> </ul> </div> </div> </div> <div class='card shadow-sm'> <div class='card-header bg-primary text-white'> <h5 class='mb-0'>Code Example Comparison</h5> </div> <div class='card-body'> <div class='row'> <div class='col-md-6'> <h6 class='text-primary'>IronPDF (Simple)</h6> <div class='code-block'> <pre class='mb-0'><code>var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf(html); pdf.SaveAs("output.pdf");</code></pre> </div> <div class='badge bg-success mt-2'>3 Lines</div> </div> <div class='col-md-6'> <h6 class='text-warning'>ExpertPDF (Complex)</h6> <div class='code-block'> <pre class='mb-0'><code>var converter = new HtmlToPdfConverter(); converter.PdfDocumentOptions.PdfPageSize = PdfPageSize.A4; converter.NavigationTimeout = 60; byte[] result = converter.GetPdfBytesFromHtmlString(html); File.WriteAllBytes("output.pdf", result);</code></pre> </div> <div class='badge bg-warning text-dark mt-2'>5+ Lines</div> </div> </div> </div> <div class='card-footer text-muted'> <small><strong>Comparison:</strong> IronPDF provides a more intuitive API with less configuration overhead for common use cases.</small> </div> </div> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(technicalDocs); pdf.SaveAs("technical-documentation.pdf"); $vbLabelText $csharpLabel Output: 使用Bootstrap 5卡片、警告、表格和代码块的专业技术文档PDF。 IronPDF 准确渲染所有的排版、间距实用程序和网格布局,展示了优越的文档生成能力。 如何创建具有复杂布局的财务报告? 财务报告需要精确的表格格式和计算。 此示例展示了IronPDF如何使用CSS Grid和动态JavaScript渲染复杂的财务布局。 请参考PDF中的JavaScript指南,包括自定义JavaScript执行了解更多详情。 财务文档可能需要PDF压缩进行文件优化和元数据管理以符合法规要求。 在PDF中渲染图表指南有助于数据可视化。 using IronPdf; var renderer = new ChromePdfRenderer(); // Enable JavaScript for dynamic calculations renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute string financialReport = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <style> @page { size: A4; margin: 20mm; } body { font-family: Arial, sans-serif; line-height: 1.6; } .header { text-align: center; margin-bottom: 30px; } .financial-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; margin-bottom: 20px; } .grid-header { background: #2c3e50; color: white; padding: 10px; font-weight: bold; } .grid-row { padding: 10px; border-bottom: 1px solid #ddd; } .grid-row:hover { background: #f9f9f9; } .amount { text-align: right; font-family: 'Courier New', monospace; } .positive { color: #27ae60; } .negative { color: #e74c3c; } .total-row { background: #ecf0f1; font-weight: bold; margin-top: 10px; } .footer-note { font-size: 0.8em; color: #666; margin-top: 30px; text-align: center; } @media print { .grid-row:hover { background: transparent; } .financial-grid { page-break-inside: avoid; } } </style> </head> <body> <div class='header'> <h1>Quarterly Financial Report</h1> <p>Q4 2023 - Consolidated Statement</p> </div> <div class='financial-grid'> <div class='grid-header'>Revenue Stream</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>Software Licenses</div> <div class='grid-row amount'>$2,150,000</div> <div class='grid-row amount positive'>$2,875,000</div> <div class='grid-row'>Support Services</div> <div class='grid-row amount'>$850,000</div> <div class='grid-row amount positive'>$975,000</div> <div class='grid-row'>Consulting</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row amount negative'>$380,000</div> <div class='grid-row total-row'>Total Revenue</div> <div class='grid-row total-row amount'>$3,425,000</div> <div class='grid-row total-row amount positive' id='total'>$4,230,000</div> </div> <div class='financial-grid'> <div class='grid-header'>Operating Expenses</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>R&D</div> <div class='grid-row amount'>$1,200,000</div> <div class='grid-row amount'>$1,350,000</div> <div class='grid-row'>Sales & Marketing</div> <div class='grid-row amount'>$800,000</div> <div class='grid-row amount'>$950,000</div> <div class='grid-row'>General & Admin</div> <div class='grid-row amount'>$400,000</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row total-row'>Total Expenses</div> <div class='grid-row total-row amount'>$2,400,000</div> <div class='grid-row total-row amount'>$2,725,000</div> </div> <script> // Calculate growth percentage const q3Total = 3425000; const q4Total = 4230000; const growth = ((q4Total - q3Total) / q3Total * 100).toFixed(1); // Add growth indicator const totalEl = document.getElementById('total'); totalEl.innerHTML += ` <small>(+${growth}%)</small>`; </script> <div class='footer-note'> <p>This report was generated using IronPDF's advanced rendering engine.<br> All financial figures are in USD. Report generated on: <span id='date'></span></p> </div> <script> document.getElementById('date').textContent = new Date().toLocaleDateString(); </script> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(financialReport); pdf.SaveAs("financial-report.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); // Enable JavaScript for dynamic calculations renderer.RenderingOptions.EnableJavaScript = true; renderer.RenderingOptions.RenderDelay = 500; // Allow JS to execute string financialReport = @" <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <style> @page { size: A4; margin: 20mm; } body { font-family: Arial, sans-serif; line-height: 1.6; } .header { text-align: center; margin-bottom: 30px; } .financial-grid { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 10px; margin-bottom: 20px; } .grid-header { background: #2c3e50; color: white; padding: 10px; font-weight: bold; } .grid-row { padding: 10px; border-bottom: 1px solid #ddd; } .grid-row:hover { background: #f9f9f9; } .amount { text-align: right; font-family: 'Courier New', monospace; } .positive { color: #27ae60; } .negative { color: #e74c3c; } .total-row { background: #ecf0f1; font-weight: bold; margin-top: 10px; } .footer-note { font-size: 0.8em; color: #666; margin-top: 30px; text-align: center; } @media print { .grid-row:hover { background: transparent; } .financial-grid { page-break-inside: avoid; } } </style> </head> <body> <div class='header'> <h1>Quarterly Financial Report</h1> <p>Q4 2023 - Consolidated Statement</p> </div> <div class='financial-grid'> <div class='grid-header'>Revenue Stream</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>Software Licenses</div> <div class='grid-row amount'>$2,150,000</div> <div class='grid-row amount positive'>$2,875,000</div> <div class='grid-row'>Support Services</div> <div class='grid-row amount'>$850,000</div> <div class='grid-row amount positive'>$975,000</div> <div class='grid-row'>Consulting</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row amount negative'>$380,000</div> <div class='grid-row total-row'>Total Revenue</div> <div class='grid-row total-row amount'>$3,425,000</div> <div class='grid-row total-row amount positive' id='total'>$4,230,000</div> </div> <div class='financial-grid'> <div class='grid-header'>Operating Expenses</div> <div class='grid-header amount'>Q3 2023</div> <div class='grid-header amount'>Q4 2023</div> <div class='grid-row'>R&D</div> <div class='grid-row amount'>$1,200,000</div> <div class='grid-row amount'>$1,350,000</div> <div class='grid-row'>Sales & Marketing</div> <div class='grid-row amount'>$800,000</div> <div class='grid-row amount'>$950,000</div> <div class='grid-row'>General & Admin</div> <div class='grid-row amount'>$400,000</div> <div class='grid-row amount'>$425,000</div> <div class='grid-row total-row'>Total Expenses</div> <div class='grid-row total-row amount'>$2,400,000</div> <div class='grid-row total-row amount'>$2,725,000</div> </div> <script> // Calculate growth percentage const q3Total = 3425000; const q4Total = 4230000; const growth = ((q4Total - q3Total) / q3Total * 100).toFixed(1); // Add growth indicator const totalEl = document.getElementById('total'); totalEl.innerHTML += ` <small>(+${growth}%)</small>`; </script> <div class='footer-note'> <p>This report was generated using IronPDF's advanced rendering engine.<br> All financial figures are in USD. Report generated on: <span id='date'></span></p> </div> <script> document.getElementById('date').textContent = new Date().toLocaleDateString(); </script> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(financialReport); pdf.SaveAs("financial-report.pdf"); $vbLabelText $csharpLabel 此代码示例展示了IronPDF如何让开发人员使用CSS Grid布局,JavaScript执行和针对打印的CSS。 向报告中添加自定义页眉和页脚,实现背景和前景以进行品牌推广,水印用于安全性,数字签名用于身份验证。 请参考生成PDF报告指南了解更多详情。 如何将多个PDF文件合并为一个PDF? 这两个库都能将多个PDF合并为单个文档,便捷的传输。 请参考合并或拆分PDF指南了解更多详情。 多页文档可能需要页面管理或拆分多页PDF。 对于大文件性能,考虑使用异步PDF生成或并行处理。 合并两个或多个PDF示例提供了实际的实现。 对于组织PDF,IronPDF提供了完整的工具。 IronPDF如何合并PDF文件? 此代码示例展示了IronPDF如何让开发人员从HTML字符串渲染两个PDF并合并它们。 这直接的方法提供了额外的设置选项。 有关页码和分页符的信息,请参阅相应的指南。 此外,在PDF之间复制页面以实现更细化的控制。 有关表单,请参阅表单管理和编辑表单文档。 页码和分页符示例展示了组合实现。 // Import the IronPdf library using IronPdf; // Define HTML strings to convert to PDF var htmlA = @"<p> [PDF_A] </p> <p> [PDF_A] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_A] 2nd Page</p>"; var htmlB = @"<p> [PDF_B] </p> <p> [PDF_B] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_B] 2nd Page</p>"; // Initialize a new renderer var renderer = new ChromePdfRenderer(); // Render HTML strings as PDFs var pdfDocA = renderer.RenderHtmlAsPdf(htmlA); var pdfDocB = renderer.RenderHtmlAsPdf(htmlB); // Merge the PDF documents var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB); // Save the merged PDF mergedPdf.SaveAs("Merged.pdf"); // Import the IronPdf library using IronPdf; // Define HTML strings to convert to PDF var htmlA = @"<p> [PDF_A] </p> <p> [PDF_A] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_A] 2nd Page</p>"; var htmlB = @"<p> [PDF_B] </p> <p> [PDF_B] 1st Page </p> <div style='page-break-after: always;'></div> <p> [PDF_B] 2nd Page</p>"; // Initialize a new renderer var renderer = new ChromePdfRenderer(); // Render HTML strings as PDFs var pdfDocA = renderer.RenderHtmlAsPdf(htmlA); var pdfDocB = renderer.RenderHtmlAsPdf(htmlB); // Merge the PDF documents var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB); // Save the merged PDF mergedPdf.SaveAs("Merged.pdf"); $vbLabelText $csharpLabel Merge方法接受多个文件作为Enumerable对象。 请参阅合并PDF的IronPDF代码示例。 有关添加封面或创建目录,请参见专业指南。 还可盖印新内容或添加附件。 拆分PDF并提取页面示例演示了逆向操作。 请注意,包含可编辑表单的合并PDF其表单字段名称附加了索引号。 有关详细信息,请参阅表单数据处理指南。 ExpertPDF如何合并PDF文件? ExpertPDF使用一个需要单独安装的合并PDF组件。 AppendPDFFile方法将文件附加到PDFMerge对象: // Import the ExpertPdf.MergePdf namespace using ExpertPdf.MergePdf; // Initialize a new PDFMerge object PDFMerge pdfMerge = new PDFMerge(); // Append PDF files to the merge object pdfMerge.AppendPDFFile("output.pdf"); pdfMerge.AppendPDFFile("html-to-pdf.pdf"); // Save the merged PDF to a file pdfMerge.SaveMergedPDFToFile("merged.pdf"); // Import the ExpertPdf.MergePdf namespace using ExpertPdf.MergePdf; // Initialize a new PDFMerge object PDFMerge pdfMerge = new PDFMerge(); // Append PDF files to the merge object pdfMerge.AppendPDFFile("output.pdf"); pdfMerge.AppendPDFFile("html-to-pdf.pdf"); // Save the merged PDF to a file pdfMerge.SaveMergedPDFToFile("merged.pdf"); $vbLabelText $csharpLabel 在后台,IronPDF使用更高效的合并算法。 考虑使用IronPDF的异步PDF生成和多线程生成替代同步操作以获得更高性能。 我如何实现带有文档组织的高级PDF合并? 企业应用程序需要在合并PDF时具有书签、页面组织和元数据保留等高级功能。 此示例演示书签管理、元数据处理和文档组织。 为确保合规,实施修订历史、PDF/A转换和PDF/UA可访问性。 大纲和书签示例提供了更多实现细节。 有关详细信息,请参阅设置和编辑元数据指南和元数据可见性故障排除。 using IronPdf; using System.Collections.Generic; using System.Linq; public class AdvancedPdfMerger { public static void MergeDocumentsWithBookmarks() { var renderer = new ChromePdfRenderer(); var documentsToMerge = new List<PdfDocument>(); // Create chapter PDFs with proper structure string[] chapters = { "Introduction", "Technical Overview", "Implementation", "Conclusion" }; foreach (var chapter in chapters) { string html = $@" <html> <head> <style> body {{ font-family: Georgia, serif; margin: 40px; }} h1 {{ color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }} .chapter-number {{ color: #7f8c8d; font-size: 0.8em; }} </style> </head> <body> <h1><span class='chapter-number'>Chapter {Array.IndexOf(chapters, chapter) + 1}</span><br>{chapter}</h1> <p>This is the content for the {chapter} chapter. In a real document, this would contain extensive content, diagrams, and detailed explanations.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(html); // Add metadata to each chapter pdf.MetaData.Title = $"Chapter: {chapter}"; pdf.MetaData.Author = "Technical Documentation Team"; pdf.MetaData.Subject = "Enterprise PDF Generation"; documentsToMerge.Add(pdf); } // Create a table of contents string tocHtml = @" <html> <head> <style> body { font-family: Georgia, serif; margin: 40px; } h1 { text-align: center; color: #2c3e50; margin-bottom: 40px; } .toc-entry { margin: 15px 0; font-size: 1.1em; } .toc-entry a { text-decoration: none; color: #3498db; } .page-number { float: right; color: #7f8c8d; } </style> </head> <body> <h1>Table of Contents</h1>"; int pageNumber = 2; // Starting after TOC page foreach (var chapter in chapters) { tocHtml += $@" <div class='toc-entry'> <a href='#'>Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}</a> <span class='page-number'>{pageNumber}</span> </div>"; pageNumber += 2; // Assuming each chapter is 2 pages } tocHtml += @" </body> </html>"; var tocPdf = renderer.RenderHtmlAsPdf(tocHtml); // Merge all documents with TOC first var allDocuments = new List<PdfDocument> { tocPdf }; allDocuments.AddRange(documentsToMerge); var finalPdf = PdfDocument.Merge(allDocuments); // Add bookmarks for navigation finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0); int currentPage = 1; // After TOC foreach (var chapter in chapters) { finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage); currentPage += 2; } // Set document properties finalPdf.MetaData.Title = "Complete Technical Documentation"; finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET"; finalPdf.MetaData.CreationDate = System.DateTime.Now; // Add page numbers to footer finalPdf.AddTextFooters("Page {page} of {total-pages}", new ChromePdfRenderer.ChromePdfRenderOptions() { MarginBottom = 20, MarginLeft = 50, MarginRight = 50 }); finalPdf.SaveAs("advanced-merged-document.pdf"); } } using IronPdf; using System.Collections.Generic; using System.Linq; public class AdvancedPdfMerger { public static void MergeDocumentsWithBookmarks() { var renderer = new ChromePdfRenderer(); var documentsToMerge = new List<PdfDocument>(); // Create chapter PDFs with proper structure string[] chapters = { "Introduction", "Technical Overview", "Implementation", "Conclusion" }; foreach (var chapter in chapters) { string html = $@" <html> <head> <style> body {{ font-family: Georgia, serif; margin: 40px; }} h1 {{ color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 10px; }} .chapter-number {{ color: #7f8c8d; font-size: 0.8em; }} </style> </head> <body> <h1><span class='chapter-number'>Chapter {Array.IndexOf(chapters, chapter) + 1}</span><br>{chapter}</h1> <p>This is the content for the {chapter} chapter. In a real document, this would contain extensive content, diagrams, and detailed explanations.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(html); // Add metadata to each chapter pdf.MetaData.Title = $"Chapter: {chapter}"; pdf.MetaData.Author = "Technical Documentation Team"; pdf.MetaData.Subject = "Enterprise PDF Generation"; documentsToMerge.Add(pdf); } // Create a table of contents string tocHtml = @" <html> <head> <style> body { font-family: Georgia, serif; margin: 40px; } h1 { text-align: center; color: #2c3e50; margin-bottom: 40px; } .toc-entry { margin: 15px 0; font-size: 1.1em; } .toc-entry a { text-decoration: none; color: #3498db; } .page-number { float: right; color: #7f8c8d; } </style> </head> <body> <h1>Table of Contents</h1>"; int pageNumber = 2; // Starting after TOC page foreach (var chapter in chapters) { tocHtml += $@" <div class='toc-entry'> <a href='#'>Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}</a> <span class='page-number'>{pageNumber}</span> </div>"; pageNumber += 2; // Assuming each chapter is 2 pages } tocHtml += @" </body> </html>"; var tocPdf = renderer.RenderHtmlAsPdf(tocHtml); // Merge all documents with TOC first var allDocuments = new List<PdfDocument> { tocPdf }; allDocuments.AddRange(documentsToMerge); var finalPdf = PdfDocument.Merge(allDocuments); // Add bookmarks for navigation finalPdf.BookMarks.AddBookMarkAtStart("Table of Contents", 0); int currentPage = 1; // After TOC foreach (var chapter in chapters) { finalPdf.BookMarks.AddBookMarkAtStart($"Chapter {Array.IndexOf(chapters, chapter) + 1}: {chapter}", currentPage); currentPage += 2; } // Set document properties finalPdf.MetaData.Title = "Complete Technical Documentation"; finalPdf.MetaData.Keywords = "IronPDF, Documentation, Enterprise, .NET"; finalPdf.MetaData.CreationDate = System.DateTime.Now; // Add page numbers to footer finalPdf.AddTextFooters("Page {page} of {total-pages}", new ChromePdfRenderer.ChromePdfRenderOptions() { MarginBottom = 20, MarginLeft = 50, MarginRight = 50 }); finalPdf.SaveAs("advanced-merged-document.pdf"); } } $vbLabelText $csharpLabel 此高级实现演示书签管理、元数据处理和页码编排。 有关详情,请参阅组织PDF教程。 在合并后探索PDF压缩技术。 为了安全起见,实施密码保护和加密。 添加经典文本页眉和页脚示例提供了格式选项。 有关其他功能,请查看添加页码和添加目录指南。 密码、安全性和元数据示例展示了集成的实现。 如何将图像转换为PDF? IronPDF将各种图像转换为PDF,这是ExpertPDF不具备的功能。 但是,ExpertPDF可以从PDF中提取图像,并将PDF转换为图像,这也是IronPDF的功能。 请参阅图像到PDF指南以获取更多信息。 IronPDF支持将PDF栅格化为图像并提取文本和图像。 对于高级场景,可绘制文本和位图或绘制线条和矩形。 图像到PDF示例演示了实用的实现。 关于图像质量,请参见C# PDF到图像不损失质量示例。 IronPDF如何将图像转换为PDF? 从图像创建PDF使用ImageToPdfConverter类。 图片可以从任何文件夹加载,支持包括多页TIFF文件在内的多种格式。 同时可将图像添加到现有的PDF或使用SVG图形。 为了内存效率,使用使用MemoryStream将PDF栅格化为图像。 自定义PDF尺寸示例有助于版面控制。 // Import the IronPdf namespace using IronPdf; // Specify the folder containing the image files var imageFiles = System.IO.Directory.EnumerateFiles(@"C:\project\assets") .Where(file => file.EndsWith(".jpg") || file.EndsWith(".jpeg")); // Convert the images to a PDF document var pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles); // Save the PDF document pdfDocument.SaveAs(@"C:\project\composite.pdf"); // Import the IronPdf namespace using IronPdf; // Specify the folder containing the image files var imageFiles = System.IO.Directory.EnumerateFiles(@"C:\project\assets") .Where(file => file.EndsWith(".jpg") || file.EndsWith(".jpeg")); // Convert the images to a PDF document var pdfDocument = ImageToPdfConverter.ImageToPdf(imageFiles); // Save the PDF document pdfDocument.SaveAs(@"C:\project\composite.pdf"); $vbLabelText $csharpLabel 除了将图像转换为PDF之外,IronPDF通过将其栅格化为图像来将扫描文档和商业文档转换为图像。 该库还可以提取图像,来自各种文件类型。有关内存操作的信息,请参阅使用MemoryStream将PDF栅格化为图像的指南。 对于大图像,请考虑ImageToPDF文件大小优化。 纵向和横向方向示例帮助进行页面设置。有关高级图像处理,请参阅嵌入位图和图像示例。 如何创建具有版面控制的高级图像到PDF转换? 为了控制图像放置和专业版面,此照片集示例演示了嵌入图像和创建布局。 关于云存储,请参阅Azure Blob Storage图像指南。 设置灰度示例展示了图像处理选项: using IronPdf; using System.IO; public class PhotoAlbumCreator { public static void CreatePhotoAlbum(string imagesFolder, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; string htmlContent = @" <!DOCTYPE html> <html> <head> <style> body { font-family: Arial, sans-serif; } .album-title { text-align: center; font-size: 2em; margin-bottom: 30px; color: #2c3e50; } .photo-container { margin-bottom: 30px; text-align: center; page-break-inside: avoid; } .photo { max-width: 100%; max-height: 500px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } .caption { margin-top: 10px; font-style: italic; color: #666; } .page-break { page-break-after: always; } </style> </head> <body> <h1 class='album-title'>My Photo Album</h1>"; var imageFiles = Directory.GetFiles(imagesFolder, "*.*") .Where(file => new[] { ".jpg", ".jpeg", ".png", ".gif" } .Contains(Path.GetExtension(file).ToLower())) .ToList(); for (int i = 0; i < imageFiles.Count; i++) { string base64Image = Convert.ToBase64String(File.ReadAllBytes(imageFiles[i])); string fileName = Path.GetFileNameWithoutExtension(imageFiles[i]); htmlContent += $@" <div class='photo-container'> <img class='photo' src='data:image/jpeg;base64,{base64Image}' alt='{fileName}'> <div class='caption'>Photo {i + 1}: {fileName}</div> </div>"; // Add page break every 2 photos if ((i + 1) % 2 == 0 && i < imageFiles.Count - 1) { htmlContent += "<div class='page-break'></div>"; } } htmlContent += @" <div style='text-align: center; margin-top: 40px; color: #999;'> <small>Created with IronPDF - Total Photos: " + imageFiles.Count + @"</small> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs(outputPath); } } // Usage PhotoAlbumCreator.CreatePhotoAlbum(@"C:\MyPhotos", @"C:\MyPhotoAlbum.pdf"); using IronPdf; using System.IO; public class PhotoAlbumCreator { public static void CreatePhotoAlbum(string imagesFolder, string outputPath) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; renderer.RenderingOptions.MarginTop = 20; renderer.RenderingOptions.MarginBottom = 20; renderer.RenderingOptions.MarginLeft = 20; renderer.RenderingOptions.MarginRight = 20; string htmlContent = @" <!DOCTYPE html> <html> <head> <style> body { font-family: Arial, sans-serif; } .album-title { text-align: center; font-size: 2em; margin-bottom: 30px; color: #2c3e50; } .photo-container { margin-bottom: 30px; text-align: center; page-break-inside: avoid; } .photo { max-width: 100%; max-height: 500px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } .caption { margin-top: 10px; font-style: italic; color: #666; } .page-break { page-break-after: always; } </style> </head> <body> <h1 class='album-title'>My Photo Album</h1>"; var imageFiles = Directory.GetFiles(imagesFolder, "*.*") .Where(file => new[] { ".jpg", ".jpeg", ".png", ".gif" } .Contains(Path.GetExtension(file).ToLower())) .ToList(); for (int i = 0; i < imageFiles.Count; i++) { string base64Image = Convert.ToBase64String(File.ReadAllBytes(imageFiles[i])); string fileName = Path.GetFileNameWithoutExtension(imageFiles[i]); htmlContent += $@" <div class='photo-container'> <img class='photo' src='data:image/jpeg;base64,{base64Image}' alt='{fileName}'> <div class='caption'>Photo {i + 1}: {fileName}</div> </div>"; // Add page break every 2 photos if ((i + 1) % 2 == 0 && i < imageFiles.Count - 1) { htmlContent += "<div class='page-break'></div>"; } } htmlContent += @" <div style='text-align: center; margin-top: 40px; color: #999;'> <small>Created with IronPDF - Total Photos: " + imageFiles.Count + @"</small> </div> </body> </html>"; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs(outputPath); } } // Usage PhotoAlbumCreator.CreatePhotoAlbum(@"C:\MyPhotos", @"C:\MyPhotoAlbum.pdf"); $vbLabelText $csharpLabel 此代码示例展示了如何使用IronPDF让开发者实现使用DataURI嵌入图像、管理分页符以及创建专业布局。 有关云图像,请参阅Azure Blob Storage图像指南。 对于大文件,考虑ImageToPDF文件大小优化。 还可缩放PDF对象和翻译PDF对象以实现精准定位。 将PDF导出到内存的示例帮助进行内存高效的工作流程。 请参阅高效添加HTML内容指南以进行批处理。 有什么许可和定价选项? IronPDF是可在IronPDF网站上获得的商业C# PDF库。私人开发免费,商业用途有许可证。 有多种许可证可用,适用于单个项目、开发者、机构和企业。 支持SaaS和OEM再分发。 有关实施的细节,请参阅许可证密钥指南。 在部署时,请妥善应用许可证密钥。 对于Web应用程序,请在Web.config中设置许可证密钥。 对于许可证服务器连接问题,请参考故障排除指南。使用许可证密钥指南提供完整的实施细节。 所有许可证均包括30天退款保证、一年支持和产品更新。 永久许可证要求一次性购买,无需额外费用。 单个开发者/项目的Lite包从$799起。 有关第一年后支持,请参阅许可证延长。 要升级以获得更多功能或部署,请查看许可证升级。 有关IronPDF和IIS的部署或将IronPDF添加到软件安装程序的信息,请参见专业指南。 ClickOnce版本不兼容指南有助于解决部署问题。 ExpertPDF提供按开发者或公司许可证。 免费试用ExpertPDF。 查看下面的许可证功能。 考虑使用IronPDF的透明许可选项替代ExpertPDF以获取更高的价值和完整的支持。 ExpertComponents工具包总计开发者许可证起价$850,ExpertPDF工具包起价$750。单独购买组件。 查看ExpertPDF完整定价。 对于企业需求,IronPDF的许可提供更高的价值和完整的功能集合。 我应该选择哪个PDF库? IronPDF在本地渲染HTML到PDF,无需互联网连接,模拟符合标准的网络浏览器。 HTML渲染产生精确的、矢量格式的输出,适用于商业打印。 有透明定价的商业用途许可证。 对于企业部署,IronPDF提供Docker支持和远程引擎能力。 请参阅指南远程容器运行IronPDF和本地与远程引擎选项。 该库提供IronPdf.Slim以减少部署体积,并支持包大小优化。 IronPdf.Slim v2025.5.6部署异常指南有助于解决特定版本问题。 ExpertPDF的HTML到PDF转换器库将网页和HTML转换为PDF,从ASP.NET生成报告,并以电子方式签署合同。 免费使用带有许可的附加功能。 与IronPDF对包括Android部署的完整平台支持不同,ExpertPDF仅限于Windows平台。 在后台,IronPDF使用高级安全功能和定期产品更新。 里程碑概览展示了包括Chrome渲染里程碑、兼容性里程碑和稳定性和性能里程碑在内的持续改进。 虽然两个库都可以处理PDF并从流行格式转换,但IronPDF具有比ExpertPDF更大的优势。 IronPDF支持从更广泛的格式范围转换,包括XML、图像、AngularJS、Markdown和RTF,具有可靠的PDF生成、格式化和编辑功能。 这可确保开发人员在实际开发中实现高效。 该库在性能提升方面表现出色,具有高通量场景的异步支持。 对于并发处理,IronPDF支持并行PDF生成和多线程生成。 有关优化细节,请参阅初始渲染缓慢故障排除指南。 ExpertPDF需要单独的组件安装,而IronPDF集成了所有功能。 当项目需要完整的PDF功能时,这尤为有用。 IronPDF软件包提供终身许可证,无需持续费用,而ExpertPDF则需要续订。 此外,IronPDF提供完整的文档、API参考和代码示例以实现快速启动。 演示部分展示了实际的实现。 如需故障排除,请参阅快速故障排除指南或探索初次渲染性能和GPU进程优化。 获取最佳支持指南确保有效的问题解决。 对于生产部署,IronPDF提供卓越的调试能力、自定义日志记录和广泛的故障排除指南。 该库支持高级功能:PDF/A合规性、PDF/UA可访问性、HSM数字签名和清除以确保安全处理。 对于企业安全性,IronPDF提供加密和解密、密码保护和完整的安全功能。 高级功能包括编辑文本、压平PDF和管理PDF版本。 将PDF转换为base64指南帮助进行数据传输。 关于支持和开发,IronPDF提供工程支持,并附有详细指南制作支持请求。 库产品更新和里程碑展示了持续改进。 对于.NET MAUI开发者,IronPDF提供PDF查看功能和XAML到PDF转换。 Blazor开发者使用Blazor Server集成和Razor到PDF转换。 该库支持MVC应用程序的CSHTML到PDF转换和无头CSHTML渲染。 请参阅Blazor Server / WebAssembly指南了解限制。 对于专用用途,IronPDF在OpenAI智能处理集成、在PDF中呈现图表、MVC应用中的CSHTML到PDF转换以及对国际语言和UTF-8的支持方面表现优秀。 该库处理复杂场景:压平PDF、线性化以便于快速网络查看和创建PDF表单。 探索转换PDF页面、删除PDF对象和设置自定义临时路径。 IronPDF的完整功能概览展示了创建PDF、转换PDF、编辑PDF、组织PDF和保护PDF的能力。 附加功能包括在C#中读取PDF文件、文本查找和替换以及删除特定PDF页面。 关于部署注意事项,请参阅在本地机器上调试Azure Functions、Azure日志文件管理、AWS日志文件处理以及502错误网关解决方案。 IronPDF提供全面的错误处理,包括路径访问被拒解决方案、Chrome依赖项部署、PDFium依赖项部署和不良分配错误解决方案。 平台特定支持包括Linux特定指南、macOS本机异常和Windows Nano Server限制。 安全功能包括Log4j漏洞状态和防止AWS Lambda上的内存段错误。 请注意ExpertPDF 是其各自所有者的注册商标。 此网站与 ExpertPDF 无关,不受其赞助或认可。 所有产品名称、徽标和品牌均为各自所有者的财产。 比较仅供参考,反映撰写时公开可用的信息。)}] 常见问题解答 如何在C#中将HTML转换为PDF? 你可以使用IronPDF的RenderHtmlAsPdf方法将HTML字符串转换为PDF。你还可以使用RenderHtmlFileAsPdf将HTML文件转换为PDF。 IronPDF和ExpertPDF之间的主要区别是什么? IronPDF提供更广泛的格式支持和集成功能,包括从HTML创建PDF、编辑和格式转换。ExpertPDF提供简单的HTML到PDF转换,并具有输出文件配置和数字签名选项。 我可以使用这些库从PDF中提取文本和图像吗? 是的,IronPDF允许您从PDF文档中提取文本和图像,使在.NET应用程序中处理和分析PDF内容变得轻松。 这些PDF库有哪些安装选项? IronPDF和ExpertPDF都可以使用Visual Studio的NuGet包管理器安装。此外,IronPDF的.DLL库可以直接从IronPDF网站下载。 是否可以将多个PDF文件合并成一个文档? 是的,IronPDF提供一个合并方法来将多个PDF合成一个文档。ExpertPDF也提供了一个PDFMerge组件来合并PDF。 IronPDF需要通过互联网连接才能进行HTML到PDF转换吗? 不,IronPDF不需要通过互联网连接进行HTML到PDF转换,这使其成为离线应用程序的可靠选项。 IronPDF有哪些许可选项? IronPDF提供多种许可选项,包括单个项目、开发者、代理商和企业许可。所有许可都是永久的,并包括30天退款保证和一年的支持和更新。 ExpertPDF可以处理PDF文档的数字签名吗? 是的,ExpertPDF支持PDF文档的数字签名,允许生成安全和经过认证的PDF文件。 C#开发者在处理PDF时面临哪些挑战,这些库如何帮助解决? C#开发者在读取、写入、创建和转换PDF时经常面临挑战。像IronPDF和ExpertPDF这样的库通过提供强大的HTML到PDF转换、PDF编辑等工具简化了这些任务,便于轻松集成到C#应用程序中。 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的替代品。 阅读更多 在C#中使用Itextsharp为PDF添加数字签名与IronPDF的产品比较
已更新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的替代品。 阅读更多