C#代码实现在PDF文档中创建表格

 更新时间:2026年06月15日 11:51:49   作者:2501_93070778  
表格能够以清晰直观的行列结构展示数据,使信息更易于阅读和理解,本文介绍了如何使用 C# 在 PDF 文档中创建功能丰富的表格,有需要的小伙伴可以了解下

表格能够以清晰直观的行列结构展示数据,使信息更易于阅读和理解。与纯文本相比,表格不仅能够增强数据的可读性,还能帮助读者快速进行比较并发现数据之间的关联关系。本文将介绍如何在 C# 和 VB.NET 中创建 PDF 表格,并分别使用两种不同的表格对象来实现简单表格和复杂表格的生成。

在 PDF 开发中,通常可以使用 PdfTablePdfGrid 两种方式创建表格。其中,PdfTable 适用于快速创建结构简单、格式要求不高的表格;而 PdfGrid 则提供了更丰富的格式设置能力,适合构建复杂的数据表格。

两者的主要区别如下:

功能PdfTablePdfGrid
行格式设置可通过事件实现,无直接 API支持通过 API 设置
列格式设置支持通过 API 设置支持通过 API 设置
单元格格式设置可通过事件实现,无直接 API支持通过 API 设置
列合并(Column Span)不支持支持
行合并(Row Span)可通过事件实现,无直接 API支持
嵌套表格可通过事件实现,无直接 API支持
事件支持BeginCellLayout、EndCellLayout、BeginRowLayout、EndRowLayout、BeginPageLayout、EndPageLayoutBeginPageLayout、EndPageLayout

接下来将分别演示如何使用 PdfTablePdfGrid 创建 PDF 表格,并介绍它们在不同场景下的应用方法。

安装 PDF 开发库

在开始之前,需要先将 PDF 开发库的 DLL 文件添加到 .NET 项目中作为引用。您可以通过下载对应的安装包获取 DLL 文件,也可以直接通过 NuGet 包管理器进行安装。

PM> Install-Package Spire.PDF

完成安装后,即可在项目中调用相关 API 来创建、编辑和处理 PDF 文档。

使用 PdfTable 类创建表格

以下是在 PDF 文档中使用 PdfTable 类创建表格的主要步骤:

  1. 创建 PdfDocument 对象。
  2. 使用 PdfDocument.Pages.Add() 方法向文档中添加一个页面。
  3. 创建 PdfTable 对象。
  4. 通过 PdfTable.Style 属性设置表格样式。
  5. 通过 PdfTable.DataSource 属性向表格填充数据。
  6. BeginRowLayout 事件中设置行高和行颜色。
  7. 使用 PdfTable.Draw() 方法将表格绘制到 PDF 页面中。
  8. 使用 PdfDocument.SaveToFile() 方法将文档保存为 PDF 文件。

完整示例代码如下:

using System;
using System.Data;
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Tables;

namespace CreateTable
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();

            //添加页面
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(40));

            //创建 PdfTable 对象
            PdfTable table = new PdfTable();

            //设置表头和普通单元格字体
            table.Style.DefaultStyle.Font = new PdfTrueTypeFont(new Font("Times New Roman", 12f, FontStyle.Regular), true);
            table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("Times New Roman", 12f, FontStyle.Bold), true);

            //创建 DataTable 数据源
            DataTable dataTable = new DataTable();
            dataTable.Columns.Add("ID");
            dataTable.Columns.Add("姓名");
            dataTable.Columns.Add("部门");
            dataTable.Columns.Add("职位");
            dataTable.Columns.Add("级别");

            dataTable.Rows.Add(new string[] { "1", "David", "IT", "经理", "1" });
            dataTable.Rows.Add(new string[] { "3", "Julia", "人力资源", "经理", "1" });
            dataTable.Rows.Add(new string[] { "4", "Sophie", "市场部", "经理", "1" });
            dataTable.Rows.Add(new string[] { "7", "Wickey", "市场部", "销售代表", "2" });
            dataTable.Rows.Add(new string[] { "9", "Wayne", "人力资源", "人事主管", "2" });
            dataTable.Rows.Add(new string[] { "11", "Mia", "开发部", "开发人员", "2" });

            //将 DataTable 设置为表格数据源
            table.DataSource = dataTable;

            //显示表头(默认情况下表头是隐藏的)
            table.Style.ShowHeader = true;

            //设置表头行的字体颜色和背景颜色
            table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.Gray;
            table.Style.HeaderStyle.TextBrush = PdfBrushes.White;

            //设置表头文本对齐方式
            table.Style.HeaderStyle.StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);

            //设置其他单元格文本对齐方式
            for (int i = 0; i < table.Columns.Count; i++)
            {
                table.Columns[i].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            }

            //注册 BeginRowLayout 事件
            table.BeginRowLayout += Table_BeginRowLayout;

            //在页面上绘制表格
            table.Draw(page, new PointF(0, 30));

            //保存为 PDF 文件
            doc.SaveToFile("PdfTable.pdf");
        }

        //事件处理方法
        private static void Table_BeginRowLayout(object sender, BeginRowLayoutEventArgs args)
        {
            //设置行高
            args.MinimalHeight = 20f;

            //设置隔行背景色
            if (args.RowIndex < 0)
            {
                return;
            }

            if (args.RowIndex % 2 == 1)
            {
                args.CellStyle.BackgroundBrush = PdfBrushes.LightGray;
            }
            else
            {
                args.CellStyle.BackgroundBrush = PdfBrushes.White;
            }
        }
    }
}

使用 PdfGrid 类创建表格

以下是在 PDF 文档中使用 PdfGrid 类创建表格的主要步骤:

  1. 创建 PdfDocument 对象。
  2. 使用 PdfDocument.Pages.Add() 方法向文档中添加一个页面。
  3. 创建 PdfGrid 对象。
  4. 通过 PdfGrid.Style 属性设置表格样式。
  5. 使用 PdfGrid.Rows.Add() 方法向表格中添加行。
  6. 通过 PdfGridRow.Cells[index].Value 属性向指定单元格填充数据。
  7. 使用 PdfGridRow.RowSpanPdfGridRow.ColumnSpan 属性实现单元格跨行或跨列合并。
  8. 通过 PdfGridRow.Cells[index].StringFormatPdfGridRow.Cells[index].Style 属性设置指定单元格的格式和样式。
  9. 使用 PdfGrid.Draw() 方法将表格绘制到 PDF 页面中。
  10. 使用 PdfDocument.SaveToFile() 方法将文档保存为 PDF 文件。

完整示例代码如下:

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Grid;
using System.Drawing;

namespace CreateGrid
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();

            //添加页面
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(40));

            //创建 PdfGrid 对象
            PdfGrid grid = new PdfGrid();

            //设置单元格内边距
            grid.Style.CellPadding = new PdfPaddings(1, 1, 1, 1);

            //设置字体
            grid.Style.Font = new PdfTrueTypeFont(new Font("Times New Roman", 13f, FontStyle.Regular), true);

            //添加行
            PdfGridRow row1 = grid.Rows.Add();
            PdfGridRow row2 = grid.Rows.Add();
            PdfGridRow row3 = grid.Rows.Add();
            PdfGridRow row4 = grid.Rows.Add();
            grid.Columns.Add(4);

            //设置列宽
            foreach (PdfGridColumn col in grid.Columns)
            {
                col.Width = 110f;
            }

            //向指定单元格写入数据
            row1.Cells[0].Value = "订单与付款状态";
            row2.Cells[0].Value = "订单编号";
            row2.Cells[1].Value = "日期";
            row2.Cells[2].Value = "客户";
            row2.Cells[3].Value = "是否付款";

            row3.Cells[0].Value = "00223";
            row3.Cells[1].Value = "2022/06/02";
            row3.Cells[2].Value = "Brick Lane Realty";
            row3.Cells[3].Value = "是";

            row4.Cells[0].Value = "00224";
            row4.Cells[1].Value = "2022/06/03";
            row4.Cells[3].Value = "否";

            //跨列合并单元格
            row1.Cells[0].ColumnSpan = 4;

            //跨行合并单元格
            row3.Cells[2].RowSpan = 2;

            //设置指定单元格的文本对齐方式
            row1.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
            row3.Cells[2].StringFormat = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);

            //设置指定单元格的背景颜色
            row1.Cells[0].Style.BackgroundBrush = PdfBrushes.Orange;
            row4.Cells[3].Style.BackgroundBrush = PdfBrushes.LightGray;

            //设置单元格边框样式
            PdfBorders borders = new PdfBorders();
            borders.All = new PdfPen(Color.Orange, 0.8f);

            foreach (PdfGridRow pgr in grid.Rows)
            {
                foreach (PdfGridCell pgc in pgr.Cells)
                {
                    pgc.Style.Borders = borders;
                }
            }

            //在页面上绘制表格
            grid.Draw(page, new PointF(0, 30));

            //保存为 PDF 文件
            doc.SaveToFile("PdfGrid.pdf");
        }
    }
}

总结

本文介绍了如何使用 C# 在 PDF 文档中创建功能丰富的表格。通过 PdfGrid 类,开发者不仅能够向表格中添加行、列和数据,还可以灵活设置单元格格式,实现跨行跨列合并、文本对齐、背景颜色设置以及边框样式自定义等高级功能。

示例中创建了一个订单与付款状态表,通过设置列宽、单元格内容和样式,使表格结构更加清晰易读。同时,利用 ColumnSpanRowSpan 属性实现了单元格合并效果,并通过自定义边框和背景色增强了表格的视觉表现力。

借助这种方式,可以轻松生成格式规范、外观专业的 PDF 表格,适用于订单管理、财务报表、业务统计以及各类数据展示场景。

到此这篇关于C#代码实现在PDF文档中创建表格的文章就介绍到这了,更多相关C# PDF创建表格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C# 添加、修改和删除PDF书签的实例代码

    C# 添加、修改和删除PDF书签的实例代码

    本篇文章主要介绍了C# 添加、修改和删除PDF书签的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • C#使用Linq to XML处理XML详解

    C#使用Linq to XML处理XML详解

    LINQ to XML是.NET Framework 3.5引入的一种XML编程API,本文将深入探讨LINQ to XML的核心概念、常见操作及最佳实践,需要的小伙伴可以了解下
    2025-07-07
  • Unity实现游戏卡牌滚动效果

    Unity实现游戏卡牌滚动效果

    这篇文章主要为大家详细介绍了Unity实现游戏卡牌滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C#和Java有什么区别和联系

    C#和Java有什么区别和联系

    这篇文章主要介绍了C#和Java有什么区别和联系的相关资料,本文介绍的非常详细,涉及到rsa语法,c#和java互转方面的知识点,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • C#使用自定义算法对数组进行反转操作的方法

    C#使用自定义算法对数组进行反转操作的方法

    这篇文章主要介绍了C#使用自定义算法对数组进行反转操作的方法,涉及C#针对数组操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#中async/await之线程上下文工作原理

    C#中async/await之线程上下文工作原理

    这篇文章主要为大家介绍了C#中async/await之线程上下文工作原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-05-05
  • C#基础教程之类class与结构struct的区别

    C#基础教程之类class与结构struct的区别

    struct是值类型,创建一个struct类型的实例被分配在栈上,class是引用类型,创建一个class类型实例被分配在托管堆上,下面这篇文章主要给大家介绍了关于C#基础教程之类class与结构struct区别的相关资料,需要的朋友可以参考下
    2022-11-11
  • C#单位转换器简单案例

    C#单位转换器简单案例

    这篇文章主要为大家详细介绍了C#单位转换器简单案例,一个简单的winform应用程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • C#中 城市线路图的纯算法以及附带求极权值

    C#中 城市线路图的纯算法以及附带求极权值

    本篇文章介绍了,在C#中城市线路图的纯算法以及附带求极权值的方法,需要的朋友参考下
    2013-04-04
  • c# datetime方法应用介绍

    c# datetime方法应用介绍

    本文将详细介绍c# datetime方法应用,需要了解更多的朋友可以参考下
    2012-11-11

最新评论