在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
C# 的 IEnumerable接口是.NET框架中最通用的工具之一,使开发人员能够以高度灵活的方式处理集合。 结合时IronPDFIEnumerable 可用于动态数据操作和高效的 PDF 生成,非常适合创建报告、导出数据或从数据库查询生成文档等场景。
使用IEnumerable可确保您的应用程序保持可扩展性和内存效率,因为它以惰性方式处理数据,避免一次将整个数据集加载到内存中。 这对于处理庞大数据集合的大型应用程序尤其有用,例如一个巨大的数据库表。
IronPDF 是一个功能强大的 .NET 库,旨在简化以编程方式创建、编辑和管理 PDF 文件的过程。 它提供了多种功能,包括HTML到PDF转换、文本提取、PDF合并等。 通过将IronPDF集成到您的C#项目中,您可以高效处理复杂的PDF任务,而无需深入研究PDF的内部知识。
IronPDF 还支持多种格式,允许您从原始 HTML、Razor 视图、ASP.NET 网页,甚至直接从数据结构生成 PDF。 这种灵活性使其成为开发人员构建现代数据驱动应用程序的必备工具。
要在您的项目中使用IronPDF,请按照以下步骤操作:
在 Visual Studio 中打开您的 .NET 项目。
Install-Package IronPdf
Install-Package IronPdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'Install-Package IronPdf
在您的 Visual Studio 项目中,转到 工具 > NuGet 包管理器 > 为解决方案管理 NuGet 包
IEnumerable 接口表示一个可以枚举的元素序列。 常见示例包括数组、列表和 LINQ 查询结果。 通过利用 LINQ,您可以在使用 IronPDF 生成 PDF 之前,将数据过滤、排序和投影到所需的格式。
IEnumerable 的一个关键优势是其延迟执行模型,该模型允许查询仅在访问其结果时才执行。 这能够实现高效的数据操作并减少复杂工作流程中的计算开销。
此外,该列表实现 IEnumerable 这意味着任何类似 List
假设你有一个实现了 IEnumerable 的员工列表,您需要将其导出为 PDF 表格。 使用IEnumerable和IronPDF,您可以使用迭代器方法遍历数据并将其转换为结构良好的PDF。
为了提升展示效果,您可以使用带有内联CSS的HTML表格,根据数据动态地设置行和列的样式。 这可确保 PDF 输出既具功能性又具视觉吸引力。
通过 LINQ,您可以在将数据传递给 IronPDF 之前对其进行筛选和转换。 例如,您可以仅筛选活跃员工,并将他们的名字格式化为大写,用于PDF输出。
var activeEmployees = employees.Where(e => e.IsActive).Select(e => new {
Name = e.Name.ToUpper(),
Position = e.Position,
Age = e.Age
});
var activeEmployees = employees.Where(e => e.IsActive).Select(e => new {
Name = e.Name.ToUpper(),
Position = e.Position,
Age = e.Age
});
Dim activeEmployees = employees.Where(Function(e) e.IsActive).Select(Function(e) New With {
Key .Name = e.Name.ToUpper(),
Key .Position = e.Position,
Key .Age = e.Age
})
然后,可以将此转换后的数据转换为适合 PDF 的 HTML 格式以进行渲染。
如果你需要为集合类中的每个记录生成单独的PDF,可以使用foreach循环遍历可枚举对象并动态生成单个PDF。 这在创建发票、证书或个性化报告时特别有用。
foreach (var employee in employees)
{
string html = $"<h1>{employee.Name}</h1><p>Position: {employee.Position}</p><p>Age: {employee.Age}</p>";
var pdf = Renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"{employee.Name}_Report.pdf");
}
foreach (var employee in employees)
{
string html = $"<h1>{employee.Name}</h1><p>Position: {employee.Position}</p><p>Age: {employee.Age}</p>";
var pdf = Renderer.RenderHtmlAsPdf(html);
pdf.SaveAs($"{employee.Name}_Report.pdf");
}
For Each employee In employees
Dim html As String = $"<h1>{employee.Name}</h1><p>Position: {employee.Position}</p><p>Age: {employee.Age}</p>"
Dim pdf = Renderer.RenderHtmlAsPdf(html)
pdf.SaveAs($"{employee.Name}_Report.pdf")
Next employee
在C#中,扩展方法是一种强大的方式,可以在不修改其源代码的情况下为现有类型添加功能。 您可以创建扩展方法,以简化对IEnumerable或List的操作。
例如,让我们创建一个扩展方法来获取可枚举集合的第一个元素。
public static class EnumerableExtensions
{
public static T FirstOrDefaultElement<T>(this IEnumerable<T> collection)
{
return collection?.FirstOrDefault();
}
}
public static class EnumerableExtensions
{
public static T FirstOrDefaultElement<T>(this IEnumerable<T> collection)
{
return collection?.FirstOrDefault();
}
}
Public Module EnumerableExtensions
<System.Runtime.CompilerServices.Extension> _
Public Function FirstOrDefaultElement(Of T)(ByVal collection As IEnumerable(Of T)) As T
Return collection?.FirstOrDefault()
End Function
End Module
首先设置您的项目并初始化IronPDF和ChromePdfRenderer类:
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
Imports IronPdf
Private renderer As New ChromePdfRenderer()
将您的可枚举数据准备为一个HTML字符串:
var employees = new List<Employee>
{
new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 }
};
string html = "<table style='width:100%; border: 1px solid black;'>" +
"<tr><th>Name</th><th>Position</th><th>Age</th></tr>";
foreach (var employee in employees)
{
html += $"<tr><td>{employee.Name}</td><td>{employee.Position}</td><td>{employee.Age}</td></tr>";
}
html += "</table>";
var employees = new List<Employee>
{
new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 }
};
string html = "<table style='width:100%; border: 1px solid black;'>" +
"<tr><th>Name</th><th>Position</th><th>Age</th></tr>";
foreach (var employee in employees)
{
html += $"<tr><td>{employee.Name}</td><td>{employee.Position}</td><td>{employee.Age}</td></tr>";
}
html += "</table>";
Dim employees = New List(Of Employee) From {
New Employee With {
.Name = "John Doe",
.Position = "Developer",
.Age = 30
},
New Employee With {
.Name = "Jane Smith",
.Position = "Designer",
.Age = 25
}
}
Dim html As String = "<table style='width:100%; border: 1px solid black;'>" & "<tr><th>Name</th><th>Position</th><th>Age</th></tr>"
For Each employee In employees
html &= $"<tr><td>{employee.Name}</td><td>{employee.Position}</td><td>{employee.Age}</td></tr>"
Next employee
html &= "</table>"
将HTML转换为PDF:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Employees.pdf");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("Employees.pdf");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("Employees.pdf")
现在我们已经深入了解了如何使用C#的Enumerable类与IronPDF生成PDF文件,接下来我们来看一个完整的示例代码,其中我们使用这些工具生成了一个新的动态PDF文档。
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;
public class Employee
{
public string Name { get; set; }
public string Position { get; set; }
public int Age { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
// Sample employee data
var employees = new List<Employee>
{
new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 },
new Employee { Name = "Sam Wilson", Position = "Manager", Age = 35 }
};
// Filter and sort data using LINQ
var filteredEmployees = employees
.Where(e => e.Age >= 25)
.OrderBy(e => e.Name)
.ToList();
// Generate HTML for the PDF
string html = "<h1 style='text-align:center;'>Employee Report</h1>" +
"<table style='width:100%; border-collapse: collapse;'>" +
"<tr style='background-color: #f2f2f2;'>" +
"<th style='border: 1px solid black; padding: 8px;'>Name</th>" +
"<th style='border: 1px solid black; padding: 8px;'>Position</th>" +
"<th style='border: 1px solid black; padding: 8px;'>Age</th></tr>";
foreach (var employee in filteredEmployees)
{
html += $"<tr>" +
$"<td style='border: 1px solid black; padding: 8px;'>{employee.Name}</td>" +
$"<td style='border: 1px solid black; padding: 8px;'>{employee.Position}</td>" +
$"<td style='border: 1px solid black; padding: 8px;'>{employee.Age}</td>" +
$"</tr>";
}
html += "</table>";
// Initialize ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML to PDF
try
{
var pdf = renderer.RenderHtmlAsPdf(html);
string outputPath = "EmployeeReport.pdf";
pdf.SaveAs(outputPath);
Console.WriteLine($"PDF generated successfully at: {outputPath}");
}
catch (Exception ex)
{
Console.WriteLine($"Error generating PDF: {ex.Message}");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using IronPdf;
public class Employee
{
public string Name { get; set; }
public string Position { get; set; }
public int Age { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
// Sample employee data
var employees = new List<Employee>
{
new Employee { Name = "John Doe", Position = "Developer", Age = 30 },
new Employee { Name = "Jane Smith", Position = "Designer", Age = 25 },
new Employee { Name = "Sam Wilson", Position = "Manager", Age = 35 }
};
// Filter and sort data using LINQ
var filteredEmployees = employees
.Where(e => e.Age >= 25)
.OrderBy(e => e.Name)
.ToList();
// Generate HTML for the PDF
string html = "<h1 style='text-align:center;'>Employee Report</h1>" +
"<table style='width:100%; border-collapse: collapse;'>" +
"<tr style='background-color: #f2f2f2;'>" +
"<th style='border: 1px solid black; padding: 8px;'>Name</th>" +
"<th style='border: 1px solid black; padding: 8px;'>Position</th>" +
"<th style='border: 1px solid black; padding: 8px;'>Age</th></tr>";
foreach (var employee in filteredEmployees)
{
html += $"<tr>" +
$"<td style='border: 1px solid black; padding: 8px;'>{employee.Name}</td>" +
$"<td style='border: 1px solid black; padding: 8px;'>{employee.Position}</td>" +
$"<td style='border: 1px solid black; padding: 8px;'>{employee.Age}</td>" +
$"</tr>";
}
html += "</table>";
// Initialize ChromePdfRenderer
ChromePdfRenderer renderer = new ChromePdfRenderer();
// Render the HTML to PDF
try
{
var pdf = renderer.RenderHtmlAsPdf(html);
string outputPath = "EmployeeReport.pdf";
pdf.SaveAs(outputPath);
Console.WriteLine($"PDF generated successfully at: {outputPath}");
}
catch (Exception ex)
{
Console.WriteLine($"Error generating PDF: {ex.Message}");
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports IronPdf
Public Class Employee
Public Property Name() As String
Public Property Position() As String
Public Property Age() As Integer
End Class
Public Class Program
Public Shared Sub Main(ByVal args() As String)
' Sample employee data
Dim employees = New List(Of Employee) From {
New Employee With {
.Name = "John Doe",
.Position = "Developer",
.Age = 30
},
New Employee With {
.Name = "Jane Smith",
.Position = "Designer",
.Age = 25
},
New Employee With {
.Name = "Sam Wilson",
.Position = "Manager",
.Age = 35
}
}
' Filter and sort data using LINQ
Dim filteredEmployees = employees.Where(Function(e) e.Age >= 25).OrderBy(Function(e) e.Name).ToList()
' Generate HTML for the PDF
Dim html As String = "<h1 style='text-align:center;'>Employee Report</h1>" & "<table style='width:100%; border-collapse: collapse;'>" & "<tr style='background-color: #f2f2f2;'>" & "<th style='border: 1px solid black; padding: 8px;'>Name</th>" & "<th style='border: 1px solid black; padding: 8px;'>Position</th>" & "<th style='border: 1px solid black; padding: 8px;'>Age</th></tr>"
For Each employee In filteredEmployees
html &= $"<tr>" & $"<td style='border: 1px solid black; padding: 8px;'>{employee.Name}</td>" & $"<td style='border: 1px solid black; padding: 8px;'>{employee.Position}</td>" & $"<td style='border: 1px solid black; padding: 8px;'>{employee.Age}</td>" & $"</tr>"
Next employee
html &= "</table>"
' Initialize ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML to PDF
Try
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim outputPath As String = "EmployeeReport.pdf"
pdf.SaveAs(outputPath)
Console.WriteLine($"PDF generated successfully at: {outputPath}")
Catch ex As Exception
Console.WriteLine($"Error generating PDF: {ex.Message}")
End Try
End Sub
End Class
此 C# 程序旨在使用 IronPDF 库生成筛选员工数据的 PDF 报告。 上述代码首先定义了一个Employee类,其中包括Name、Position和Age属性,代表单个员工记录。
创建了一个示例员工数据列表,包括三个具有不同姓名、职位和年龄的员工对象。 然后,程序使用 LINQ 过滤此列表,仅选择年龄在 25 岁或以上的员工,并按姓名字母顺序排序。 此过滤和排序后的列表存储在filteredEmployees变量中。
接下来,程序构建一个用于生成PDF的HTML字符串。 它以一个标题和表格结构开始,定义了名称、职位和年龄的列标题。 然后,它遍历过滤后的员工列表,动态生成每个员工信息的表格行。 生成的HTML通过IronPDF创建PDFChromePdfRenderer.
上面的示例有效地演示了如何使用IronPDF从动态生成的HTML生成PDF,展示LINQ在筛选和排序数据方面的强大功能,并在PDF生成过程中优雅地处理异常。
使用 LINQ 优化对数据的过滤和转换。 例如
var filteredEmployees = employees.Where(e => e.Age > 25).OrderBy(e => e.Name);
var filteredEmployees = employees.Where(e => e.Age > 25).OrderBy(e => e.Name);
Dim filteredEmployees = employees.Where(Function(e) e.Age > 25).OrderBy(Function(e) e.Name)
通过有效链接LINQ方法来减少冗余操作。 这提高了性能,尤其是在处理大型数据集时。
对于大型数据集,考虑将数据流分为较小的块以避免内存开销。 利用 yield return 懒惰地生成非泛型集合数据,确保内存的高效使用。
IEnumerable<Employee> GetEmployees() {
foreach (var employee in database.GetAllEmployees()) {
yield return employee;
}
}
IEnumerable<Employee> GetEmployees() {
foreach (var employee in database.GetAllEmployees()) {
yield return employee;
}
}
Private Iterator Function GetEmployees() As IEnumerable(Of Employee)
For Each employee In database.GetAllEmployees()
Yield employee
Next employee
End Function
将您的PDF生成逻辑包装在try-catch块中以优雅地处理错误:
try
{
var pdf = Renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.PdfException ex)
{
Console.WriteLine($"PDF Error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"General Error: {ex.Message}");
}
try
{
var pdf = Renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.PdfException ex)
{
Console.WriteLine($"PDF Error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"General Error: {ex.Message}");
}
Try
Dim pdf = Renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Catch ex As IronPdf.Exceptions.PdfException
Console.WriteLine($"PDF Error: {ex.Message}")
Catch ex As Exception
Console.WriteLine($"General Error: {ex.Message}")
End Try
记录错误并提供用户友好的反馈可以显著提高应用程序的稳健性。
C# 的 IEnumerable 与...的集成IronPDF开启了一种高效灵活的方式,以编程方式生成专业的PDF。 通过利用 IEnumerable,您可以简化数据的转换和格式化,同时利用 IronPDF 的丰富功能集生成高质量的文档。 无论您是导出数据报告、创建发票,还是生成个性化内容,此组合都能确保可扩展性、性能和易用性。
我们鼓励开发者探索 IronPDF 的更多高级功能,例如嵌入多媒体或保护 PDF,以进一步提升他们的文档自动化工作流程。 有关更多见解、教程和支持,请参阅IronPDF文档.