博客 / 詳情

返回

C# 繪製 PDF 表格:輕鬆生成動態與自定義佈局表格

在日常的企業系統開發和數據處理場景中,生成包含結構化信息的 PDF 報表是一項非常常見的需求。無論是業務清單、統計數據、還是系統導出的資料,表格通常都是呈現信息最直接、最清晰的方式。因此,如何在 PDF 中靈活繪製表格、控制樣式、綁定數據,成為許多 .NET 開發者的關鍵任務之一。

在這一需求下,Free Spire.PDF for .NET 提供了兩種常用的表格繪製機制:PdfTablePdfGrid。它們分別面向不同的應用場景,支持自動樣式、單元格格式控制、數據綁定等功能。本文將結合示例代碼,深入介紹兩者的使用方式、外觀設置以及核心差異,並幫助你在 C# 中快速構建專業、美觀的 PDF 表格佈局。

1. 使用 PdfTable 繪製數據表格

PdfTable 支持直接綁定 DataTable 或自定義集合,適合用於動態報表生成。下面演示如何創建一個包含員工信息的表格,並設置交替行顏色、表頭樣式和單元格對齊方式。

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

namespace PdfTableDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            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("微軟雅黑", 11f, FontStyle.Regular), true);
            table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("微軟雅黑", 12f, FontStyle.Bold), true);

            // 構造數據源
            DataTable dt = new DataTable();
            dt.Columns.Add("員工ID");
            dt.Columns.Add("姓名");
            dt.Columns.Add("部門");
            dt.Columns.Add("職位");
            dt.Columns.Add("級別");
            dt.Rows.Add(new string[] { "101", "張偉", "技術部", "開發工程師", "2" });
            dt.Rows.Add(new string[] { "102", "李娜", "人事部", "主管", "1" });
            dt.Rows.Add(new string[] { "103", "王強", "市場部", "專員", "2" });
            dt.Rows.Add(new string[] { "104", "劉芳", "市場部", "經理", "1" });
            dt.Rows.Add(new string[] { "105", "趙敏", "技術部", "測試工程師", "2" });

            table.DataSource = dt;
            table.Style.ShowHeader = true;

            // 表頭樣式
            table.Style.HeaderStyle.BackgroundBrush = PdfBrushes.DarkBlue;
            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);
            }

            // 交替行顏色
            table.BeginRowLayout += (sender, args) =>
            {
                args.MinimalHeight = 22f;
                if (args.RowIndex < 0) return;
                args.CellStyle.BackgroundBrush = args.RowIndex % 2 == 0 ? PdfBrushes.White : PdfBrushes.LightGray;
            };

            table.Draw(page, new PointF(0, 40));
            doc.SaveToFile("PdfTableExample.pdf");
        }
    }
}

表格預覽:

C# 繪製 PDF 表格:PdfTable

關鍵點解析

  • 數據源綁定PdfTable.DataSource 可以直接綁定 DataTable 或集合對象,自動生成行列。
  • 表頭顯示:通過 ShowHeader = true 顯示錶頭,結合字體、背景色設置可以快速美化。
  • 行樣式控制BeginRowLayout 事件允許對每行高度、背景色進行動態設置,實現交替行顏色。
  • 單元格對齊PdfStringFormat 控制水平與垂直對齊方式,使表格內容整齊。

PdfTable 更適合報表類數據展示,尤其是行列數固定或來源於數據庫的數據表。

2. 使用 PdfGrid 繪製自定義表格

PdfGrid 更適合用於自由佈局的表格,如需要合併單元格、跨行跨列或複雜邊框樣式的場景。下面示例演示一個訂單信息表格,包含單元格合併和自定義邊框。

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

namespace PdfGridDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            PdfDocument doc = new PdfDocument();
            PdfPageBase page = doc.Pages.Add(PdfPageSize.A4, new PdfMargins(40));

            PdfGrid grid = new PdfGrid();
            grid.Columns.Add(4);
            grid.Style.CellPadding = new PdfPaddings(3, 3, 3, 3);
            grid.Style.Font = new PdfTrueTypeFont(new Font("微軟雅黑", 12f, FontStyle.Regular), true);

            PdfGridRow rowTitle = grid.Rows.Add();
            PdfGridRow rowHeader = grid.Rows.Add();
            PdfGridRow row1 = grid.Rows.Add();
            PdfGridRow row2 = grid.Rows.Add();

            // 設置標題跨列
            rowTitle.Cells[0].Value = "訂單信息表";
            rowTitle.Cells[0].ColumnSpan = 4;
            rowTitle.Cells[0].Style.BackgroundBrush = PdfBrushes.Orange;
            rowTitle.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);

            // 設置表頭
            rowHeader.Cells[0].Value = "訂單號";
            rowHeader.Cells[1].Value = "日期";
            rowHeader.Cells[2].Value = "客户";
            rowHeader.Cells[3].Value = "已付款";
            foreach (PdfGridCell cell in rowHeader.Cells)
            {
                cell.Style.BackgroundBrush = PdfBrushes.DarkBlue;
                cell.Style.TextBrush = PdfBrushes.White;
                cell.StringFormat = new PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle);
            }

            // 填充數據
            row1.Cells[0].Value = "A1001";
            row1.Cells[1].Value = "2025/11/01";
            row1.Cells[2].Value = "星辰地產";
            row1.Cells[3].Value = "是";
            row2.Cells[0].Value = "A1002";
            row2.Cells[1].Value = "2025/11/02";
            row2.Cells[2].Value = "華夏科技";
            row2.Cells[3].Value = "否";

            // 設置行/列合併示例
            row1.Cells[2].RowSpan = 2; // 客户列跨兩行

            // 設置邊框
            PdfBorders borders = new PdfBorders();
            borders.All = new PdfPen(Color.Orange, 0.7f);
            foreach (PdfGridRow r in grid.Rows)
            {
                foreach (PdfGridCell c in r.Cells)
                {
                    c.Style.Borders = borders;
                }
            }

            grid.Draw(page, new PointF(0, 50));
            doc.SaveToFile("PdfGridExample.pdf");
        }
    }
}

表格預覽:

C# 繪製 PDF 表格:PdfGrid

關鍵點解析

  • 自由佈局PdfGrid 可靈活設置單元格的跨行 (RowSpan) 和跨列 (ColumnSpan)。
  • 樣式靈活:每個單元格都可以單獨設置背景色、邊框、對齊方式。
  • 適合複雜表格:如果表格不規則、需要突出標題或合併單元格,PdfGrid 的控制力更強。

3. PdfTable 與 PdfGrid 的區別

雖然 PdfTablePdfGrid 都可以繪製表格,但它們的適用場景略有不同:

  • 數據綁定PdfTable 支持直接綁定 DataTable 或集合,適合報表型表格;PdfGrid 更適合手動構建每個單元格的數據。
  • 樣式控制PdfGrid 可以單獨設置每個單元格樣式、跨行跨列、邊框更靈活;PdfTable 更注重批量樣式統一。
  • 複雜表格:涉及跨行、跨列、特殊邊框和自定義佈局時,PdfGrid 優勢明顯;需要快速生成數據表格時,PdfTable 更高效。

總結來説,如果你的需求是數據庫或集合驅動的報表,選擇 PdfTable;如果是自由佈局或跨行跨列表格,PdfGrid 更合適。

總結

本文展示了 C# 使用 Spire.PDF 繪製 PDF 表格 的兩種方式:PdfTablePdfGrid。通過示例代碼可以看到:

  • PdfTable:適合綁定數據源,支持表頭、交替行顏色、單元格對齊,快速生成報表表格。
  • PdfGrid:適合自由佈局,支持單元格合併、邊框和背景顏色自定義,適合複雜或不規則表格。

掌握這兩類表格的使用方法,可以幫助開發者在生成 PDF 報表時靈活應對不同需求,無論是企業內部報表、財務清單還是訂單信息,都可以輕鬆實現高質量輸出。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.