表格是一种直观高效的数据展示方式,可以按行和列的形式呈现数据,从而更容易吸引读者的注意。相比于普通文本内容,表格能够更清晰地反映数据之间的关系,降低阅读难度,加深读者对数据的理解。本文将介绍如何使用 Spire.PDF for .NET 通过 .NET 程序在 PDF 文档中创建表格。
Spire.PDF for .NET 提供了 PdfTable 和 PdfGrid 类来处理 PDF 文档中的表格。PdfTable 类用于快速创建简单常规而没有太多格式的表格。而 PdfGrid 类则用于创建更复杂的表格。
下表列出了这两个类之间的区别。
PdfTable | PdfGrid | |
格式设置 | ||
行 | 可通过事件设置, 无 API 支持。 | 可通过 API 设置。 |
列 | 可通过 API 设置(StringFormat)。 | 可通过 API 设置(StringFormat)。 |
单元格 | 可通过事件设置 ,无 API 支持。 | 可通过 API 设置。 |
其他 | ||
跨列合并 | 不支持。 | 可通过 API 设置。 |
跨行合并 | 可通过事件设置 ,无 API 支持。 | 可通过 API 设置。 |
嵌套表格 | 可通过事件设置 ,无 API 支持。 | 可通过 API 设置。 |
事件 | BeginCellLayout, EndCellLayout, BeginRowLayout, EndRowLayout, BeginPageLayout, EndPageLayout. | BeginPageLayout, EndPageLayout. |
以下两部分分别介绍如何使用 PdfTable 类和 PdfGrid 类在 PDF 文档中创建表格:
安装 Spire.PDF for .NET
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDF
使用 PdfTable 类在 PDF 文档中创建表格
以下是使用 PdfTable 类在 PDF 文档中创建表格的详细操作步骤:
- 创建一个 PdfDocument 的对象。
- 使用 PdfDocument.Pages.Add() 方法在 PDF 文档中添加一个页面。
- 创建一个 Pdftable 的对象。
- 通过 PdfTable.Style 属性设置表格样式。
- 通过 PdfTable.DataSource 属性插入数据到表格中。
- 通过 BeginRowLayout 事件设置行高和行的背景色。
- 使用 PdfTable.Draw() 方法在 PDF 页面上绘制表格。
- 使用 PdfDocument.SaveToFile() 方法保存 PDF 文档。
- C#
- VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Tables;
using System;
using System.Data;
using System.Drawing;
namespace CreatePDFTable
{
internal 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("HarmonyOS Sans SC", 12f, FontStyle.Regular), true);
table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("HarmonyOS Sans SC Medium", 12f, FontStyle.Bold), true);
//创建一个DataTable的对象
DataTable dataTable = new DataTable();
dataTable.Columns.Add("编号");
dataTable.Columns.Add("姓名");
dataTable.Columns.Add("部门");
dataTable.Columns.Add("职位");
dataTable.Columns.Add("等级");
dataTable.Rows.Add(new string[] { "1", "大卫", "信息部", "经理", "1" });
dataTable.Rows.Add(new string[] { "3", "朱颖", "人事部", "经理", "1" });
dataTable.Rows.Add(new string[] { "4", "苏菲", "市场部", "经理", "1" });
dataTable.Rows.Add(new string[] { "7", "维奇", "市场部", "销售代表", "2" });
dataTable.Rows.Add(new string[] { "9", "韦恩", "人事部", "人力资源主管", "2" });
dataTable.Rows.Add(new string[] { "11", "米雅", "开发部", "开发人员", "2" });
//将数据表设置为表格的数据源
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);
}
//订阅事件
table.BeginRowLayout += Table_BeginRowLayout;
//将表格绘制在页面上
table.Draw(page, new PointF(0, 30));
//保存PDF文档
doc.SaveToFile("PdfTable.pdf");
doc.Dispose();
}
//事件处理器
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;
}
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Tables
Imports System
Imports System.Data
Imports System.Drawing
Namespace CreatePDFTable
Friend Class Program
Shared Sub Main(ByVal args() As String)
'创建一个PdfDocument的对象
Dim doc As PdfDocument = New PdfDocument()
'添加一个页面
Dim page As PdfPageBase = doc.Pages.Add(PdfPageSize.A4, New PdfMargins(40))
'创建一个PdfTable的对象
Dim table As PdfTable = New PdfTable()
'设置表头以及其他单元格的字体
table.Style.DefaultStyle.Font = New PdfTrueTypeFont(New Font("HarmonyOS Sans SC", 12.0F, FontStyle.Regular), True)
table.Style.HeaderStyle.Font = New PdfTrueTypeFont(New Font("HarmonyOS Sans SC Medium", 12.0F, FontStyle.Bold), True)
'创建一个DataTable的对象
Dim dataTable As DataTable = New DataTable()
dataTable.Columns.Add("编号")
dataTable.Columns.Add("姓名")
dataTable.Columns.Add("部门")
dataTable.Columns.Add("职位")
dataTable.Columns.Add("等级")
Dim String() As DataTable.Rows.Add(New
{
"1", "大卫", "信息部", "经理", "1"
}
)
Dim String() As DataTable.Rows.Add(New
{
"3", "朱颖", "人事部", "经理", "1"
}
)
Dim String() As DataTable.Rows.Add(New
{
"4", "苏菲", "市场部", "经理", "1"
}
)
Dim String() As DataTable.Rows.Add(New
{
"7", "维奇", "市场部", "销售代表", "2"
}
)
Dim String() As DataTable.Rows.Add(New
{
"9", "韦恩", "人事部", "人力资源主管", "2"
}
)
Dim String() As DataTable.Rows.Add(New
{
"11", "米雅", "开发部", "开发人员", "2"
}
)
'将数据表设置为表格的数据源
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)
'设置其他单元格的文本对齐方式
Dim i As Integer
For i = 0 To table.Columns.Count - 1 Step i + 1
table.Columns(i).StringFormat = New PdfStringFormat(PdfTextAlignment.Center, PdfVerticalAlignment.Middle)
Next
'订阅事件
table.BeginRowLayout += Table_BeginRowLayout()
'将表格绘制在页面上
table.Draw(page, New PointF(0, 30))
'保存PDF文档
doc.SaveToFile("PdfTable.pdf")
doc.Dispose()
End Sub
'事件处理器
Private Shared Sub Table_BeginRowLayout(ByVal sender As Object, ByVal args As BeginRowLayoutEventArgs)
'设置行高
args.MinimalHeight = 20.0F
'交替行的背景色
If args.RowIndex < 0 Then
Return
End If
If args.RowIndex % 2 = 1 Then
args.CellStyle.BackgroundBrush = PdfBrushes.LightGray
Else
args.CellStyle.BackgroundBrush = PdfBrushes.White
End If
End Sub
End Class
End Namespace
使用 PdfGrid 类在 PDF 文档中创建表格
下面是使用 PdfGrid 类在 PDF 文档中创建表格的详细操作步骤:
- 创建一个 PdfDocument 的对象。
- 使用 PdfDocument.Pages.Add() 方法在 PDF 文档中添加一个页面。
- 创建一个 PdfGrid 对象。
- 通过 PdfGrid.Style 属性设置表格样式。
- 使用 PdfGrid.Rows.Add() 方法为表格添加行。
- 通过 PdfGridRow.Cells[index].Value 属性插入数据到指定单元格。
- 通过 PdfGridRow.RowSpan 或 PdfGridRow.ColumnSpan 属性跨列或跨行合并单元格。
- 通过 PdfGridRow.Cells[index].StringFormat 和 PdfGridRow.Cells[index].Style 属性设置指定单元格的格式。
- 使用 PdfGrid.Draw() 方法在 PDF 页面上绘制表格。
- 使用 PdfDocument.SaveToFile() 方法保存 PDF 文档。
- C#
- VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Grid;
using System;
using System.Drawing;
namespace CreatePDFGrid
{
internal 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("HarmonyOS Sans SC", 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 = "专相地产";
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");
doc.Dispose();
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Grid
Imports System
Imports System.Drawing
Namespace CreatePDFGrid
Friend Class Program
Shared Sub Main(ByVal args() As String)
'创建一个PdfDocument的对象
Dim doc As PdfDocument = New PdfDocument()
'添加一个页面
Dim page As PdfPageBase = doc.Pages.Add(PdfPageSize.A4, New PdfMargins(40))
'创建一个PdfGrid的对象
Dim grid As PdfGrid = New PdfGrid()
'设置单元格填充
grid.Style.CellPadding = New PdfPaddings(1, 1, 1, 1)
'设置字体
grid.Style.Font = New PdfTrueTypeFont(New Font("HarmonyOS Sans SC", 13.0F, FontStyle.Regular), True)
'添加行
Dim row1 As PdfGridRow = grid.Rows.Add()
Dim row2 As PdfGridRow = grid.Rows.Add()
Dim row3 As PdfGridRow = grid.Rows.Add()
Dim row4 As PdfGridRow = grid.Rows.Add()
grid.Columns.Add(4)
'获取列宽
Dim col As PdfGridColumn
For Each col In grid.Columns
col.Width = 110.0F
Next
'写入数据到指定单元格
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 = "专相地产"
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
'设置边框格式
Dim borders As PdfBorders = New PdfBorders()
borders.All = New PdfPen(Color.Orange, 0.8F)
Dim pgr As PdfGridRow
For Each pgr In grid.Rows
Dim pgc As PdfGridCell
For Each pgc In pgr.Cells
pgc.Style.Borders = borders
Next
Next
'将表格绘制在页面上
grid.Draw(page, New PointF(0, 30))
'保存PDF文档
doc.SaveToFile("PdfGrid.pdf")
doc.Dispose()
End Sub
End Class
End Namespace
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。