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

作者:袖梨 2026-06-16

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

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

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

两者的主要区别如下:

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

接下来将分别演示如何使用 PdfTable 和 PdfGrid 创建 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.RowSpan 或 PdfGridRow.ColumnSpan 属性实现单元格跨行或跨列合并。
  8. 通过 PdfGridRow.Cells[index].StringFormat 和 PdfGridRow.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 类,开发者不仅能够向表格中添加行、列和数据,还可以灵活设置单元格格式,实现跨行跨列合并、文本对齐、背景颜色设置以及边框样式自定义等高级功能。

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

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

相关文章

精彩推荐