在C#开发过程中,将XML格式的结构化数据转换为PDF文档是常见需求,比如将业务配置数据、报表数据导出为便于传输和打印的PDF文件。iTextSharp是一款功能强大的PDF处理库,支持通过代码灵活控制PDF的内容、样式和布局,非常适合实现XML到PDF的转换逻辑。

环境准备
首先需要安装iTextSharp库,推荐使用NuGet包管理器进行安装,在Visual Studio的包管理器控制台执行以下命令即可:
Install-Package iTextSharp
安装完成后,项目中需要引入以下命名空间:
using System.Xml; using iTextSharp.text; using iTextSharp.text.pdf; using System.IO;
XML数据准备
我们先准备一份简单的XML示例数据,用于后续的转换演示,XML内容包含员工的基本信息:
<?xml version="1.0" encoding="utf-8"?>
<Employees>
<Employee>
<Id>1</Id>
<Name>张三</Name>
<Age>28</Age>
<Department>研发部</Department>
</Employee>
<Employee>
<Id>2</Id>
<Name>李四</Name>
<Age>32</Age>
<Department>产品部</Department>
</Employee>
</Employees>
核心转换实现步骤
1. 解析XML数据
使用XmlDocument类加载并解析XML文件,获取需要转换的节点数据:
// 加载XML文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("employees.xml"); // 替换为你的XML文件路径
// 获取所有Employee节点
XmlNodeList employeeNodes = xmlDoc.SelectNodes("/Employees/Employee");
2. 创建PDF文档对象
初始化PDF文档、写入器和基础样式,设置PDF的页面大小和边距:
// 创建PDF文档对象,设置页面为A4大小 Document pdfDoc = new Document(PageSize.A4, 20f, 20f, 30f, 30f); // 创建PDF写入器,绑定输出流 string pdfPath = "employee_list.pdf"; PdfWriter.GetInstance(pdfDoc, new FileStream(pdfPath, FileMode.Create)); // 打开文档 pdfDoc.Open();
3. 添加内容到PDF
遍历解析得到的XML节点,将每个员工的信息添加到PDF中,这里使用表格布局让内容更规整:
// 创建PDF表格,设置4列
PdfPTable table = new PdfPTable(4);
table.WidthPercentage = 100; // 表格宽度占页面100%
// 添加表头
table.AddCell(new PdfPCell(new Phrase("员工ID")));
table.AddCell(new PdfPCell(new Phrase("姓名")));
table.AddCell(new PdfPCell(new Phrase("年龄")));
table.AddCell(new PdfPCell(new Phrase("部门")));
// 遍历XML节点,填充表格内容
foreach (XmlNode node in employeeNodes)
{
string id = node.SelectSingleNode("Id").InnerText;
string name = node.SelectSingleNode("Name").InnerText;
string age = node.SelectSingleNode("Age").InnerText;
string department = node.SelectSingleNode("Department").InnerText;
table.AddCell(new PdfPCell(new Phrase(id)));
table.AddCell(new PdfPCell(new Phrase(name)));
table.AddCell(new PdfPCell(new Phrase(age)));
table.AddCell(new PdfPCell(new Phrase(department)));
}
// 将表格添加到PDF文档
pdfDoc.Add(table);
4. 关闭文档释放资源
所有内容添加完成后,关闭PDF文档,释放相关资源:
// 关闭文档
pdfDoc.Close();
Console.WriteLine("PDF生成完成,路径:" + pdfPath);
完整示例代码
以下是整合所有步骤的完整可运行代码:
using System;
using System.Xml;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.IO;
namespace XmlToPdfDemo
{
class Program
{
static void Main(string[] args)
{
try
{
// 1. 解析XML
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("employees.xml");
XmlNodeList employeeNodes = xmlDoc.SelectNodes("/Employees/Employee");
// 2. 创建PDF文档
Document pdfDoc = new Document(PageSize.A4, 20f, 20f, 30f, 30f);
string pdfPath = "employee_list.pdf";
PdfWriter.GetInstance(pdfDoc, new FileStream(pdfPath, FileMode.Create));
pdfDoc.Open();
// 添加标题
Paragraph title = new Paragraph("员工信息列表");
title.Alignment = Element.ALIGN_CENTER;
pdfDoc.Add(title);
// 3. 添加内容表格
PdfPTable table = new PdfPTable(4);
table.WidthPercentage = 100;
table.SpacingBefore = 20f; // 表格上方间距
// 表头
table.AddCell(new PdfPCell(new Phrase("员工ID")));
table.AddCell(new PdfPCell(new Phrase("姓名")));
table.AddCell(new PdfPCell(new Phrase("年龄")));
table.AddCell(new PdfPCell(new Phrase("部门")));
// 填充数据
foreach (XmlNode node in employeeNodes)
{
string id = node.SelectSingleNode("Id").InnerText;
string name = node.SelectSingleNode("Name").InnerText;
string age = node.SelectSingleNode("Age").InnerText;
string department = node.SelectSingleNode("Department").InnerText;
table.AddCell(new PdfPCell(new Phrase(id)));
table.AddCell(new PdfPCell(new Phrase(name)));
table.AddCell(new PdfPCell(new Phrase(age)));
table.AddCell(new PdfPCell(new Phrase(department)));
}
pdfDoc.Add(table);
// 4. 关闭文档
pdfDoc.Close();
Console.WriteLine("PDF生成成功,路径:" + Path.GetFullPath(pdfPath));
}
catch (Exception ex)
{
Console.WriteLine("生成失败:" + ex.Message);
}
}
}
}
注意事项
- XML文件路径需要替换为实际项目中的正确路径,避免出现文件找不到的异常
- iTextSharp的版本不同可能存在部分API差异,本文示例基于iTextSharp 5.x版本
- 如果需要设置PDF内容的字体样式,可以自定义
Font对象,支持设置字体大小、颜色、加粗等属性 - 生成PDF后建议检查文件是否可正常打开,避免写入过程中出现异常导致文件损坏
C#iTextSharpXML转PDFPDF生成修改时间:2026-07-10 03:57:27