比较

MigraDoc 与 IronPDF:技术比较指南

MigraDocvs IronPDF:程序化文档模型与基于 HTML 的 PDF 生成。

当 .NET 开发人员需要生成 PDF 文档时,他们会遇到两种根本不同的方法:使用MigraDoc等库进行编程式文档构建,或使用IronPDF等工具进行基于 HTML 的渲染。 本比较在关键技术方面对这两个库进行了研究,以帮助开发人员、架构师和技术决策者选择适合其 PDF 生成工作流程的方法。

什么是 MigraDoc? MigraDoc 是在 PDFSharp 基础上构建的开源文档对象模型,根据 MIT 许可发布。 该库提供了一个高级抽象层,使用 `Document`, `Section`, `Paragraph`,<代码>表格PDFDocumentRenderer什么是 IronPDF? [IronPDF](https://ironpdf.com/) 是一个商用 .NET 库,可使用嵌入式 Chromium 渲染引擎将 HTML、CSS 和 JavaScript 转换为 PDF 文档。开发人员无需以编程方式构建文档,而是使用熟悉的网络技术创建内容,然后让IronPDF处理转换。 [ChromePdfRenderer](https://ironpdf.com/object-reference/api/IronPdf.ChromePdfRenderer.html) 类是转换的主要接口。 开发人员将 HTML 字符串、文件或 URL 传递给渲染方法,IronPDF 生成的 PDF 文档完全忠实于原始网页内容--包括 CSS 样式、网页字体和 JavaScript 生成的内容。 这种基于 HTML 的方法允许团队利用现有的网络开发技能和设计工具,在网络应用程序和 PDF 输出之间共享模板。 ## 文档创建范例比较 MigraDoc 和IronPDF的根本区别在于开发人员如何定义文档内容。 这种架构上的区别会影响代码的复杂性、学习曲线和样式的灵活性。 | 特征 |MigraDoc|IronPDF| |---------|----------|---------| |**内容定义**|程序性(文件/章节/段落)|HTML/CSS| |**学习曲线**|Steep(专有 DOM)|简单(网络技能)| |**样式**|有限属性|完整的 CSS3| |**JavaScript 支持**| 无 |全面执行 Chromium| |**表格**|手动定义列/行|带 CSS 的 HTML ``| |**图表**|基本MigraDoc图表|任何 JavaScript 图表库| |**图片**|手册尺寸/定位|标准 HTML ` related to MigraDocvs IronPDF:程序化文档模型与基于 HTML 的 PDF 生成。`| |**响应式布局**| 不支持 |Flexbox、网格| |**许可**|开源(MIT)|商业翻译| MigraDoc 要求开发人员掌握其专有的文档模型。 每种元素类型都有用于创建和配置的特定 API。IronPDF开发人员使用的 HTML 元素和 CSS 属性他们很可能已经在网页开发中有所了解。 ## HTML 到 PDF:根本区别 这些库之间最重要的区别之一是对 HTML 的支持。MigraDoc不直接支持 HTML,开发人员必须使用 API 手动创建文档结构。 **MigraDoc 方法(不支持 HTML):** ```csharp // NuGet: Install-Package PdfSharp-MigraDoc-GDI using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; using System.Diagnostics; class Program { static void Main() { //MigraDocdoesn't support HTML directly // Must manually create document structure Document document = new Document(); Section section = document.AddSection(); Paragraph paragraph = section.AddParagraph(); paragraph.AddFormattedText("Hello World", TextFormat.Bold); paragraph.Format.Font.Size = 16; PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(); pdfRenderer.Document = document; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save("output.pdf"); } } ``` **IronPDF 方法(本地 HTML 支持):** ```csharp // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Hello World

"); pdf.SaveAs("output.pdf"); } } ``` 代码对比揭示了基本范式的差异。MigraDoc要求创建一个 `Document`, 添加一个 `Section`, 添加一个 `Paragraph`, 然后使用 `AddFormattedText()` 加上明确的格式化参数。IronPDF直接接受 HTML,并通过单个方法调用进行渲染。 对于拥有需要转换 PDF 的现有 HTML 模板、电子邮件设计或网页内容的团队,MigraDoc 需要以编程方式重建这些设计。 IronPdf 的 [HTML 到 PDF 的转换](https://ironpdf.com/how-to/html-file-to-pdf/)允许直接重用现有的网页内容。 ## 在 PDF 中创建表格 表格是发票、报告和数据导出等商业文档中的常见要求。 这两个库的实施复杂性有很大不同。 **MigraDoc 表格创建:** ```csharp // NuGet: Install-Package PdfSharp-MigraDoc-GDI using MigraDoc.DocumentObjectModel; using MigraDoc.DocumentObjectModel.Tables; using MigraDoc.Rendering; class Program { static void Main() { Document document = new Document(); Section section = document.AddSection(); Table table = section.AddTable(); table.Borders.Width = 0.75; Column column1 = table.AddColumn("3cm"); Column column2 = table.AddColumn("3cm"); Row row1 = table.AddRow(); row1.Cells[0].AddParagraph("Name"); row1.Cells[1].AddParagraph("Age"); Row row2 = table.AddRow(); row2.Cells[0].AddParagraph("John"); row2.Cells[1].AddParagraph("30"); PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(); pdfRenderer.Document = document; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save("table.pdf"); } } ``` **创建IronPDF表格:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); string htmlTable = @"
NameAge
John30
"; var pdf = renderer.RenderHtmlAsPdf(htmlTable); pdf.SaveAs("table.pdf"); } } ``` MigraDoc 要求明确创建表格结构:添加具有特定宽度的列、创建行、通过索引访问单元格以及为每个单元格添加段落。 对于一个简单的两列两行表格,这种方法需要 20 多行。 IronPdf 使用网络开发人员已经掌握的标准 HTML 表格语法。 CSS 可用于高级样式设计,包括边框、背景、单元格填充和响应式布局。 [表格格式化功能](https://ironpdf.com/tutorials/)可扩展至现代浏览器支持的任何 CSS 样式。 ## 页眉和页脚 专业文档通常需要页眉和页脚,并标注页码、日期或公司品牌。 两个库都以不同的方式支持这一功能。 **MigraDoc页眉和页脚:** ```csharp // NuGet: Install-Package PdfSharp-MigraDoc-GDI using MigraDoc.DocumentObjectModel; using MigraDoc.Rendering; class Program { static void Main() { Document document = new Document(); Section section = document.AddSection(); // Add header Paragraph headerPara = section.Headers.Primary.AddParagraph(); headerPara.AddText("Document Header"); headerPara.Format.Font.Size = 12; headerPara.Format.Alignment = ParagraphAlignment.Center; // Add footer Paragraph footerPara = section.Footers.Primary.AddParagraph(); footerPara.AddText("Page "); footerPara.AddPageField(); footerPara.Format.Alignment = ParagraphAlignment.Center; // Add content section.AddParagraph("Main content of the document"); PdfDocumentRenderer pdfRenderer = new PdfDocumentRenderer(); pdfRenderer.Document = document; pdfRenderer.RenderDocument(); pdfRenderer.PdfDocument.Save("header-footer.pdf"); } } ``` **IronPDF页眉和页脚:** ```csharp // NuGet: Install-Package IronPdf using IronPdf; class Program { static void Main() { var renderer = new ChromePdfRenderer(); var pdf = renderer.RenderHtmlAsPdf("

Main content of the document

"); pdf.AddTextHeader("Document Header"); pdf.AddTextFooter("Page {page}"); pdf.SaveAs("header-footer.pdf"); } } ``` MigraDoc 要求访问章节上的 `Headers.Primary` 和 `Footers.Primary` 集合,在其中创建段落,并使用<代码>添加页面字段()添加页面字段()AddNumPagesField(){总页数}添加日期字段(){日期}文档ChromePdfRenderer部分` 或 `
`|结构容器| |<代码>段落`, `

` 等。|文本要素| |<代码>格式化文本`, `` 等。|内联格式| |<代码>表格`|使用 CSS 定型| |<代码>行`|表格行| |<代码>列` 或 CSS|栏目样式| |<代码>单元格`, ``|表格单元| |<代码>图片`|带 src 属性| |<代码>样式页眉页脚RenderingOptions.HtmlHeader/Footer页面设置RenderingOptions.*PDFDocumentRendererChromePdfRenderer