如何用C#和iTextSharp解析XML生成PDF文档

来源:开发教程作者:森沢头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何用C#和iTextSharp解析XML生成PDF文档》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用C#和iTextSharp解析XML生成PDF文档》有用,将其分享出去将是对创作者最好的鼓励。

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

如何用C#和iTextSharp解析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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。