2025 指南:最佳 C# PDF 库(先免费,必要时付费)
当大多数人想到 PDF(便携式文档格式)时,他们会想到一份充满信息的文件。 他们是对的,因为目前,PDF 是最常用的共享信息的文件格式,并已成为标准。 但当程序员查看 PDF 时,他们不仅仅看到信息; 他们还分析格式、内容类型和其他技术方面。
在编程创建 PDF 文件时,保持内容结构是最重要的任务。 而且这并不像看起来那么简单,因为当我们说内容时,不仅仅指文本,还包括图像、图表、音频甚至视频。 另外,编程编辑 PDF 现在也是一种常见的需求。
在人工智能时代,我们希望能够完全控制 PDF。 有时我们需要根据政策修订文本,保护 PDF 以确保敏感文件的安全,提取数据进行处理,或动态生成报告。 这些过程有很多用例。 开发人员在编程处理 PDF 文件时通常遇到的问题是:
如何在处理所有类型的媒体作为内容时保持 PDF 文档的格式化布局
按正确顺序提取文本,尤其是当文本在列中时
处理大量页面的 PDF 文档时的内存限制
表单处理是开发人员面临的主要问题
- 将 PDF 文件转换为其他合适的文档类型
为了简化这项任务,PDF 库应运而生。 在本文中,我们将讨论多个C# PDF库,例如IronPDF和Aspose.PDF,以及它们的定价模式。 我们将深入实用用例,并了解这些库如何在几个步骤中使 PDF 创建和操作变得编程简单和生产就绪。
1. IronPDF: C# PDF 库
IronPDF是一个全面的.NET PDF库,开发者可以用它创建、编辑PDF文档,将PDF文档转换为任何其他格式,并执行更多PDF操作。 它在处理大型 PDF 文件时使用的内存非常少。 它完全在你的本地机器上运行,所以不依赖于服务器级别的处理来使用。
这个库与最新的 .NET Framework 兼容,并且与 .NET 项目的集成非常顺利。 你只需在 NuGet 包管理器中运行以下命令,IronPDF 就可以在项目中使用了:
Install-Package IronPdf你不需要安装其他任何库,因为它完全独立于外部依赖。 当你安装这个库时,它会自动一次性安装所有必需的依赖项。
IronPDF最重要的功能是以像素完美的精度将HTML转换为PDF的能力。 IronPDF 提供了多种方法从 HTML 内容创建 PDF 文档。 你可以将 HTML 字符串、HTML 文件或 URL 直接转换为 PDF。 它还支持 CSS 和 JavaScript 以确保生成的 PDF 文档能够准确反映原始 HTML 渲染。
除了基本操作,IronPDF 支持 PDF 表单、全等级加密和添加数字签名。 你可以从 PDF 文件中提取图像和文本。 你也可以添加文本或 HTML 页眉和页脚、合并和分割 PDF、修改多个文本段以及查找和替换文本。 IronPDF 不仅支持从 HTML 创建 PDF,还支持从 DOCX、RTF、MD 和图像文件转换为 PDF。 该库非常轻量且在内存管理方面非常高效(基础操作需要的内存少于10MB)。 IronPDF跟踪其有关稳定性和性能的里程碑,您可以从这里访问。
IronPDF 提供多个级别的支持。 你可以通过实时聊天、工单创建或电子邮件联系工程师。 支持团队全天候 24/7 可用。IronPDF 还有详细的教程和文档,涵盖你可能需要了解的几乎所有主题或问题。
IronPDF 是一个生产就绪的库,已被多个知名公司针对其现场产品测试、优化和信任。 这使得它成为在你的项目中用于 PDF 操作的最佳 PDF 库之一。 让我们看看 IronPDF 库的代码示例。
代码示例
将HTML转换为PDF
using IronPdf;
var renderer = new ChromePdfRenderer();
// 1. HTML String to PDF
var pdf1 = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf1.SaveAs("html-string.pdf");
// 2. HTML String with Assets (Images, CSS, JS)
var pdf2 = renderer.RenderHtmlAsPdf(
"<img src='logo.png'><link rel='stylesheet' href='style.css'>",
@"C:\assets\"
);
pdf2.SaveAs("html-with-assets.pdf");
// 3. HTML File to PDF
var pdf3 = renderer.RenderHtmlFileAsPdf("example.html");
pdf3.SaveAs("html-file.pdf");
// 4. URL to PDF
var pdf4 = renderer.RenderUrlAsPdf("https://ironpdf.com");
pdf4.SaveAs("url.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
// 1. HTML String to PDF
var pdf1 = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf1.SaveAs("html-string.pdf");
// 2. HTML String with Assets (Images, CSS, JS)
var pdf2 = renderer.RenderHtmlAsPdf(
"<img src='logo.png'><link rel='stylesheet' href='style.css'>",
@"C:\assets\"
);
pdf2.SaveAs("html-with-assets.pdf");
// 3. HTML File to PDF
var pdf3 = renderer.RenderHtmlFileAsPdf("example.html");
pdf3.SaveAs("html-file.pdf");
// 4. URL to PDF
var pdf4 = renderer.RenderUrlAsPdf("https://ironpdf.com");
pdf4.SaveAs("url.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com从 PDF 中提取文本和图像
using IronPdf;
using IronSoftware.Drawing;
using System.Collections.Generic;
// Load PDF document
var pdf = PdfDocument.FromFile("sample.pdf");
// 1. Extract All Text
string allText = pdf.ExtractAllText();
// 2. Extract Text from Specific Page
string pageText = pdf.ExtractTextFromPage(0);
// 3. Extract Text from Multiple Pages
for (int i = 0; i < pdf.PageCount; i++)
{
string text = pdf.ExtractTextFromPage(i);
Console.WriteLine($"Page {i + 1}: {text}");
}
// 4. Extract All Images
var allImages = pdf.ExtractAllImages();
foreach (var image in allImages)
{
image.SaveAs($"image_{allImages.IndexOf(image)}.png");
}
// 5. Extract Images from Specific Page
List<AnyBitmap> pageImages = pdf.ExtractBitmapsFromPage(0);
// 6. Extract Raw Images (as byte arrays)
var rawImages = pdf.ExtractAllRawImages();
for (int i = 0; i < rawImages.Count; i++)
{
System.IO.File.WriteAllBytes($"raw_image_{i}.png", rawImages[i]);
}
// 7. Extract Both Text & Images from Each Page
for (int i = 0; i < pdf.PageCount; i++)
{
string text = pdf.ExtractTextFromPage(i);
List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(i);
Console.WriteLine($"Page {i + 1}: {text}");
Console.WriteLine($"Found {images.Count} images");
}using IronPdf;
using IronSoftware.Drawing;
using System.Collections.Generic;
// Load PDF document
var pdf = PdfDocument.FromFile("sample.pdf");
// 1. Extract All Text
string allText = pdf.ExtractAllText();
// 2. Extract Text from Specific Page
string pageText = pdf.ExtractTextFromPage(0);
// 3. Extract Text from Multiple Pages
for (int i = 0; i < pdf.PageCount; i++)
{
string text = pdf.ExtractTextFromPage(i);
Console.WriteLine($"Page {i + 1}: {text}");
}
// 4. Extract All Images
var allImages = pdf.ExtractAllImages();
foreach (var image in allImages)
{
image.SaveAs($"image_{allImages.IndexOf(image)}.png");
}
// 5. Extract Images from Specific Page
List<AnyBitmap> pageImages = pdf.ExtractBitmapsFromPage(0);
// 6. Extract Raw Images (as byte arrays)
var rawImages = pdf.ExtractAllRawImages();
for (int i = 0; i < rawImages.Count; i++)
{
System.IO.File.WriteAllBytes($"raw_image_{i}.png", rawImages[i]);
}
// 7. Extract Both Text & Images from Each Page
for (int i = 0; i < pdf.PageCount; i++)
{
string text = pdf.ExtractTextFromPage(i);
List<AnyBitmap> images = pdf.ExtractBitmapsFromPage(i);
Console.WriteLine($"Page {i + 1}: {text}");
Console.WriteLine($"Found {images.Count} images");
}IRON VB CONVERTER ERROR developers@ironsoftware.com编辑 PDF 文档:页眉和页脚
using IronPdf;
using System;
var renderer = new ChromePdfRenderer();
// 1. Add Footer with Page Numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
MaxHeight = 15, // mm
DrawDividerLine = true
};
renderer.RenderingOptions.MarginBottom = 25;
// 2. Add Header with Logo
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<img src='logo.png'>",
MaxHeight = 20, // mm
BaseUrl = new Uri(@"C:\assets\images\").AbsoluteUri
};
renderer.RenderingOptions.MarginTop = 25;
// 3. Render HTML to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Title</h1><p>Content...</p>");
pdf.SaveAs("output.pdf");using IronPdf;
using System;
var renderer = new ChromePdfRenderer();
// 1. Add Footer with Page Numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<center><i>{page} of {total-pages}</i></center>",
MaxHeight = 15, // mm
DrawDividerLine = true
};
renderer.RenderingOptions.MarginBottom = 25;
// 2. Add Header with Logo
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<img src='logo.png'>",
MaxHeight = 20, // mm
BaseUrl = new Uri(@"C:\assets\images\").AbsoluteUri
};
renderer.RenderingOptions.MarginTop = 25;
// 3. Render HTML to PDF
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Title</h1><p>Content...</p>");
pdf.SaveAs("output.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com表单处理
using IronPdf;
// Load existing PDF with form fields
var pdf = PdfDocument.FromFile("EditableForm.pdf");
// Fill text fields
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
pdf.Form.FindFormField("email").Value = "john.smith@example.com";
// Fill radio button
pdf.Form.FindFormField("gender").Value = "Male";
// Fill dropdown/combobox
pdf.Form.FindFormField("country").Value = "USA";
// Fill checkbox ("Yes" to check, "No" to uncheck)
pdf.Form.FindFormField("subscribe").Value = "Yes";
// Fill textarea (use \r\n for line breaks)
pdf.Form.FindFormField("comments").Value = "This is a comment.\r\nSecond line here.";
// Save filled form
pdf.SaveAs("FilledForm.pdf");using IronPdf;
// Load existing PDF with form fields
var pdf = PdfDocument.FromFile("EditableForm.pdf");
// Fill text fields
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
pdf.Form.FindFormField("email").Value = "john.smith@example.com";
// Fill radio button
pdf.Form.FindFormField("gender").Value = "Male";
// Fill dropdown/combobox
pdf.Form.FindFormField("country").Value = "USA";
// Fill checkbox ("Yes" to check, "No" to uncheck)
pdf.Form.FindFormField("subscribe").Value = "Yes";
// Fill textarea (use \r\n for line breaks)
pdf.Form.FindFormField("comments").Value = "This is a comment.\r\nSecond line here.";
// Save filled form
pdf.SaveAs("FilledForm.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com正如你从上面的例子中看到的,你可以用 IronPDF 仅用几行代码对 PDF 文件执行任何操作。 这非常简单和直观。 方法名称很容易理解和实现。
许可
IronPDF在开发目的上是免费的,您也可以下载免费试用版。 但是对于生产,你将需要购买 IronPDF 的许可证。 IronPDF 的许可模式是灵活的,因为它提供两种类型的许可证:
订阅许可证
- 永久许可证
订阅许可证将花费你 $59/月(按年计费),包括 1 个开发人员、1 个项目和每年 15,000 个 API 调用。 超出配额的附加 API 调用每个费用为 $0.03。
永久许可证起价 $749,并具有多种选项,你可以根据需要选择。 此许可证的最佳部分在于它是一次性付款。 你不必为使用 IronPDF 重新付费。

2. Aspose.PDF for .NET
Aspose.PDF也是一个由Aspose开发的C# PDF库,作为其.NET库套件的一部分,广泛用于涉及PDF的商业活动,例如创建复杂报告、敏感文件、自定义PDF文档等。 它是 C# 最常用的 PDF 库之一。 它也支持最新的 .NET Framework。
Aspose.PDF 可以从 HTML 内容创建 PDF 文档,还支持从 XML 文件提取数据,以实现真实数据而不是创建静态文件。 这个功能对于创建复杂的报告非常有帮助。 类似于 IronPDF,你可以在 PDF 文件中添加文本、图像、图表和许多其他类型的内容。 Aspose.PDF 还提供数字签名嵌入、注释处理、页眉和页脚、以及从 PDF 文件中提取文本。 你可以从 PDF 中提取结构化数据。 这个库使用所述功能很好地处理 PDF 编辑。
除了 Aspose.PDF 库的这些优点外,还有多种缺点。 该库的主要缺点是其价格非常高(起价为1679美元),而且其定价模式非常复杂。 与 IronPDF 不同,你必须为每个过程单独购买许可证,例如开发和部署。 此外,该库在资源消耗方面非常高(在使用Aspose.PDF生成含有400多个图片的PDF时超过2GB)。 它需要大量内存来处理 PDF 操作,这真的很令人沮丧。 毫无疑问,此库在其所做的事情上表现良好,但它的学习曲线非常陡峭。 它的代码不容易理解,需要非常详细的学习来掌握。
代码示例
生成包含文本、图像和表格的 PDF 文档
using Aspose.Pdf;
using Aspose.Pdf.Text;
using (var document = new Document())
{
// Add page objects
var page = document.Pages.Add();
// Add image - requires Rectangle positioning (You can add tiff images as well)
page.AddImage("logo.png", new Rectangle(20, 730, 120, 830));
// Add text - requires manual positioning
var header = new TextFragment("Company Report");
header.TextState.Font = FontRepository.FindFont("Arial");
header.TextState.FontSize = 24;
header.HorizontalAlignment = HorizontalAlignment.Center;
header.Position = new Position(130, 720);
page.Paragraphs.Add(header);
// Add table - extensive configuration required
var table = new Table
{
ColumnWidths = "100 100 100",
Border = new BorderInfo(BorderSide.Box, 1f, Color.Black),
DefaultCellBorder = new BorderInfo(BorderSide.Box, 0.5f, Color.Gray),
DefaultCellPadding = new MarginInfo(4.5, 4.5, 4.5, 4.5)
};
// Add header row
var headerRow = table.Rows.Add();
headerRow.Cells.Add("Name");
headerRow.Cells.Add("Age");
headerRow.Cells.Add("City");
// Style each header cell individually
foreach (Cell cell in headerRow.Cells)
{
cell.BackgroundColor = Color.LightGray;
cell.DefaultCellTextState.FontSize = 12;
}
// Add data row
var dataRow = table.Rows.Add();
dataRow.Cells.Add("John Doe");
dataRow.Cells.Add("30");
dataRow.Cells.Add("New York");
page.Paragraphs.Add(table);
// Save document
document.Save("Report.pdf");
}using Aspose.Pdf;
using Aspose.Pdf.Text;
using (var document = new Document())
{
// Add page objects
var page = document.Pages.Add();
// Add image - requires Rectangle positioning (You can add tiff images as well)
page.AddImage("logo.png", new Rectangle(20, 730, 120, 830));
// Add text - requires manual positioning
var header = new TextFragment("Company Report");
header.TextState.Font = FontRepository.FindFont("Arial");
header.TextState.FontSize = 24;
header.HorizontalAlignment = HorizontalAlignment.Center;
header.Position = new Position(130, 720);
page.Paragraphs.Add(header);
// Add table - extensive configuration required
var table = new Table
{
ColumnWidths = "100 100 100",
Border = new BorderInfo(BorderSide.Box, 1f, Color.Black),
DefaultCellBorder = new BorderInfo(BorderSide.Box, 0.5f, Color.Gray),
DefaultCellPadding = new MarginInfo(4.5, 4.5, 4.5, 4.5)
};
// Add header row
var headerRow = table.Rows.Add();
headerRow.Cells.Add("Name");
headerRow.Cells.Add("Age");
headerRow.Cells.Add("City");
// Style each header cell individually
foreach (Cell cell in headerRow.Cells)
{
cell.BackgroundColor = Color.LightGray;
cell.DefaultCellTextState.FontSize = 12;
}
// Add data row
var dataRow = table.Rows.Add();
dataRow.Cells.Add("John Doe");
dataRow.Cells.Add("30");
dataRow.Cells.Add("New York");
page.Paragraphs.Add(table);
// Save document
document.Save("Report.pdf");
}IRON VB CONVERTER ERROR developers@ironsoftware.com你可以看到 Aspose.PDF 所需的代码来创建新 PDF 文档是非常复杂的。 你必须在代码本身中手动设置每个坐标。 你必须手动设置每个 PDF 对象元素的样式,这非常耗时和低效。 然而,它提供了对 PDF 文档的细粒度控制。
许可
Aspose.PDF 有多种许可证选项,但大多数是按使用付费。 许可证价格从 $1679 起。它与 IronPDF 的许可证选项(起价 $749)相比,显得非常昂贵。

3. iTextSuite for .NET
iTextSuite(通常称为iText7和iTextSharp)是Apryse提供的PDF开发SDK。 它是一个综合套件,具有我们需要在 .NET 应用程序中执行 PDF 操作的所有必要工具。 与上述库类似,你可以创建、编辑、修订、加密和执行许多其他操作 PDF 文档。
iTextSuite 能够很好地处理 PDF 创建和编辑任务,无论是创建简单的发票还是涉及金融模块报告的复杂布局。 使用起来也不重,并且可以与大型文档无缝工作。 它快速处理文档,给予你输出而没有显著延迟。
除了所有这些好的特性,iTextSuite 还有一些缺点,在考虑这个库之前你应该知道。 这个库的成本据称与市场上存在的替代品相比非常高。 其原始定价在其定价页面上无法获得。 你必须联系客户支持以获取报价。 它还提供 AGPL 许可证,但它要求你在使用 AGPL 许可的 iTextSuite 时将你的产品开源。与 Aspose 类似,它也具有陡峭的学习曲线,并且对初学者不友好。 高级 PDF 操作需要对 PDF 和库结构的详尽理解。
代码示例
创建带样式和颜色的 PDF 文档表格
using iText.Kernel.Colors;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
public void CreateStyledTable(string dest)
{
using var writer = new PdfWriter(dest);
using var pdf = new PdfDocument(writer);
var document = new Document(pdf);
// Create a 2-column table
Table table = new Table(2, false);
// Header cells with gray background
Cell cell11 = new Cell(1, 1)
.SetBackgroundColor(ColorConstants.GRAY)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("State"));
Cell cell12 = new Cell(1, 1)
.SetBackgroundColor(ColorConstants.GRAY)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("Capital"));
// Data cells
Cell cell21 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("New York"));
Cell cell22 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("Albany"));
Cell cell31 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("New Jersey"));
Cell cell32 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("Trenton"));
// Add all cells to table
table.AddCell(cell11);
table.AddCell(cell12);
table.AddCell(cell21);
table.AddCell(cell22);
table.AddCell(cell31);
table.AddCell(cell32);
document.Add(table);
document.Close();
}using iText.Kernel.Colors;
using iText.Kernel.Pdf;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;
public void CreateStyledTable(string dest)
{
using var writer = new PdfWriter(dest);
using var pdf = new PdfDocument(writer);
var document = new Document(pdf);
// Create a 2-column table
Table table = new Table(2, false);
// Header cells with gray background
Cell cell11 = new Cell(1, 1)
.SetBackgroundColor(ColorConstants.GRAY)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("State"));
Cell cell12 = new Cell(1, 1)
.SetBackgroundColor(ColorConstants.GRAY)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("Capital"));
// Data cells
Cell cell21 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("New York"));
Cell cell22 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("Albany"));
Cell cell31 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("New Jersey"));
Cell cell32 = new Cell(1, 1)
.SetTextAlignment(TextAlignment.CENTER)
.Add(new Paragraph("Trenton"));
// Add all cells to table
table.AddCell(cell11);
table.AddCell(cell12);
table.AddCell(cell21);
table.AddCell(cell22);
table.AddCell(cell31);
table.AddCell(cell32);
document.Add(table);
document.Close();
}IRON VB CONVERTER ERROR developers@ironsoftware.com从上面的例子来看,可以理解 iTextSuite 代码的复杂性。这增加了开发大应用程序的时间和复杂性。
许可
iTextSuite 提供两种许可模式。 一种是商业的,另一种是 AGPL 许可。 你可以在 AGPL 许可下免费使用 iTextSuite 进行生产,但你也需要开源你的产品。 关于商业许可证,在许可证页面上没有提到价格。 你将需要请求报价或联系客户支持。

4. PDFSharp
PDFsharp是一个解决开发者在执行编程PDF操作时遇到的PDF问题的C#开源解决方案。 它支持最新的 .NET 框架,包括 .NET Core。 这是一个轻量级解决方案,涵盖了开发人员关于 PDF 的所有基本需求。
PDFSharp 可以轻松处理大多数常见的 PDF 操作。 你可以创建文档、插入图像、绘制形状、编辑文本字体和大小。 你可以在任何位置放置任何东西,因为 PDFSharp 为你提供了对 PDF 的完全控制。
然而,PDFSharp 具有一定的限制,你应该知道。 它不支持原生的 HTML 到 PDF 转换,这对开发人员来说是一个很大的缺点,因为 HTML 使得在 PDF 中进行样式化和定位非常容易。 在需要处理多个大型文件时,其性能会受到影响。 你无法执行加密和表单填写等复杂操作。 而且它缺乏官方支持渠道。 如果你在使用这个库时遇到问题,你只能依靠社区或自己的问题解决能力。
代码示例
创建具有多种文本样式的 PDF
using PdfSharp.Pdf;
using PdfSharp.Drawing;
// Create document
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
// Example of different font styles
XFont regularFont = new XFont("Arial", 12, XFontStyleEx.Regular);
XFont boldFont = new XFont("Arial", 12, XFontStyleEx.Bold);
XFont italicFont = new XFont("Arial", 12, XFontStyleEx.Italic);
XFont boldItalicFont = new XFont("Arial", 12, XFontStyleEx.BoldItalic);
// Position for the first text
double y = 50;
double x = 50;
double lineHeight = 20;
// Draw text in different styles - REQUIRES manual positioning
gfx.DrawString("Regular text in Arial", regularFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold text in Arial", boldFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Italic text in Arial", italicFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold and Italic text in Arial", boldItalicFont, XBrushes.Black, x, y);
// Save document
document.Save("FormattedText.pdf");using PdfSharp.Pdf;
using PdfSharp.Drawing;
// Create document
PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
// Example of different font styles
XFont regularFont = new XFont("Arial", 12, XFontStyleEx.Regular);
XFont boldFont = new XFont("Arial", 12, XFontStyleEx.Bold);
XFont italicFont = new XFont("Arial", 12, XFontStyleEx.Italic);
XFont boldItalicFont = new XFont("Arial", 12, XFontStyleEx.BoldItalic);
// Position for the first text
double y = 50;
double x = 50;
double lineHeight = 20;
// Draw text in different styles - REQUIRES manual positioning
gfx.DrawString("Regular text in Arial", regularFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold text in Arial", boldFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Italic text in Arial", italicFont, XBrushes.Black, x, y);
y += lineHeight;
gfx.DrawString("Bold and Italic text in Arial", boldItalicFont, XBrushes.Black, x, y);
// Save document
document.Save("FormattedText.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com对于需要轻量级、免费的基本 PDF 生成解决方案且能精确定位的开发人员来说,PDFSharp 是一个坚实的选择。 只需准备好绕过其限制或与其他工具结合使用以满足更多高级需求。
许可
PDFSharp 是根据 MIT 许可证分发的,可以完全免费使用。 你只需在你的分发中包含原始版权声明并提及许可证即可。
5. PDFPig
PDFPig 是另一个为 .NET 开发人员构建的开源库,允许您读取和提取 PDF 文件中的内容。 这个库能从 PDF 文档中提取每个字母的位置和大小。 它检索图像,读取 PDF 注释和表单,访问超链接,并揭示嵌入文档。 你还可以访问文档元数据并查看内部 PDF 结构。
与类似的 .NET 工具相比,该库在基准测试中表现良好,并有效利用内存。 它提供了商业选项的无成本替代。 它获得定期更新并保持活跃的 GitHub 文档。
该库具有你应该注意的明显限制。 它不将 HTML 或其他格式转换为 PDF。 虽然像 docnet 或 PDFtoImage 这样的独立工具可以填补这一空白,但它不能从 PDF 页面生成图像。 PDF 表单仅为只读; 你不能修改或添加表单值。 对于表格提取,你需要像 Tabula Sharp 或 Camelot Sharp 这样的外部工具。你不能在构建文档时添加或编辑超链接。 与功能更全面的库如 IronPDF 相比,PDFPig 提供的功能更少,文档也不够广泛。
代码示例
基本文本提取
using System;
using System.Collections.Generic;
using System.Linq;
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
public static class Program
{
public static void Main()
{
using (PdfDocument document = PdfDocument.Open(@"C:\path\to\file.pdf"))
{
foreach (Page page in document.GetPages())
{
// Extract all letters
IReadOnlyList<Letter> letters = page.Letters;
string text = string.Join(string.Empty, letters.Select(x => x.Value));
// Extract words
IEnumerable<Word> words = page.GetWords();
// Extract images
IEnumerable<IPdfImage> images = page.GetImages();
}
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
public static class Program
{
public static void Main()
{
using (PdfDocument document = PdfDocument.Open(@"C:\path\to\file.pdf"))
{
foreach (Page page in document.GetPages())
{
// Extract all letters
IReadOnlyList<Letter> letters = page.Letters;
string text = string.Join(string.Empty, letters.Select(x => x.Value));
// Extract words
IEnumerable<Word> words = page.GetWords();
// Extract images
IEnumerable<IPdfImage> images = page.GetImages();
}
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com许可
PDFPig 是根据 Apache 2.0 许可证分发的,只要求你在你的发行版中包含原始版权声明和许可证文本。 超出此要求,你就可以以任何方式完全免费使用该库。
结论
综上所述,让我们比较这些 C# PDF 库的定价和许可模式。
IronPDF 提供灵活的定价计划,适合个人和公司使用。它在开发中是免费的,并包括 免费试用。 定价非常合理,仅从 $749 起步。凭借全面的功能集、出色的支持和生产就绪的稳定性,IronPDF 提供最优的性价比。
Aspose.PDF 采用按需付费的许可模式,起价为 $1679,这比其他选择贵得多。 虽然它提供了细粒度控制,但陡峭的学习曲线和高成本可能不适合所有预算。
iTextSuite 在其网站上未发布透明的定价。您必须联系他们的支持团队以获取报价,这意味着定价因情况而异。 他们确实提供 AGPL 许可供免费使用,但这要求你开源你的整个产品。
PDFSharp 和 PDFPig 分别在 MIT 和 Apache 2.0 许可证下完全免费。 然而,与商业选项相比,它们的功能有限。 PDFSharp 缺乏 HTML 到 PDF 转换,并且在处理大文件时会遇到困难,而 PDFPig 则主要是一个只读库。
选择合适的 PDF 库取决于你的具体需求和预算。 如果你需要基本操作并具备技术专长,开源选项非常适用。 然而,对于需要高级功能、可靠支持和全面文档的功能丰富应用程序,IronPDF 凭借其最具成本效益和完整功能的解决方案脱颖而出。