Spire.PDF提供了两种类PdfTable和PdfGrid用于创建PDF表格,二者在对表格进行格式化操作时存在以下差别:
PdfTable
|
PdfGrid
|
|
格式设置
|
||
行 | 无API支持,可以通过事件设置 | 可直接通过API设置 |
列 | 可直接通过API设置(StringFormat) | 可直接通过API设置(StringFormat) |
单元格 | 无API支持,可以通过事件设置 | 可直接通过API设置 |
其他
|
||
单元格纵向合并 | 不支持 | 可直接通过API设置 |
单元格横向合并 | 无API支持,可以通过事件设置 | 可直接通过API设置 |
嵌套表格 | 无API支持,可以通过事件设置 | 可直接通过API设置 |
事件 | BeginCellLayout, BeginPageLayout, BeginRowLayout, EndCellLayout, EndPageLayout, EndRowLayout | BeginPageLayout, EndPageLayout |
通过 PdfTable 类创建表格
C#
static void Main(string[] args)
{
//创建一个PDF文档
PdfDocument doc = new PdfDocument();
//添加一页
PdfPageBase page = doc.Pages.Add();
//创建一个PdfTable对象
PdfTable table = new PdfTable();
//设置字体
table.Style.DefaultStyle.Font = new PdfTrueTypeFont(new Font("宋体", 9f), true);
table.Style.HeaderStyle.Font = new PdfTrueTypeFont(new Font("宋体", 9f), true);
//创建一个DataTable并写入数据
DataTable dataTable = new DataTable();
dataTable.Columns.Add("名字");
dataTable.Columns.Add("年龄");
dataTable.Columns.Add("性别");
dataTable.Rows.Add(new string[] { "张红", "22", "女" });
dataTable.Rows.Add(new string[] { "王东", "25", "男" });
//填充数据到PDF表格
table.DataSource = dataTable;
//显示表头(默认不显示)
table.Style.ShowHeader = true;
//在BeginRowLayout事件处理方法中注册自定义事件
table.BeginRowLayout += Table_BeginRowLayout;
//将表格绘入PDF并指定位置和大小
table.Draw(page, new RectangleF(0, 20, 200, 90));
//保存到文档
doc.SaveToFile("PDF表格_1.pdf");
}
//在自定义事件中设置行高
private static void Table_BeginRowLayout(object sender, BeginRowLayoutEventArgs args)
{
args.MinimalHeight = 20f;
}
VB.NET
Private Shared Sub Main(args As String())
'创建一个PDF文档
Dim doc As New PdfDocument()
'添加一页
Dim page As PdfPageBase = doc.Pages.Add()
'创建一个PdfTable对象
Dim table As New PdfTable()
'设置字体
table.Style.DefaultStyle.Font = New PdfTrueTypeFont(New Font("宋体", 9F), True)
table.Style.HeaderStyle.Font = New PdfTrueTypeFont(New Font("宋体", 9F), True)
'创建一个DataTable并写入数据
Dim dataTable As New DataTable()
dataTable.Columns.Add("名字")
dataTable.Columns.Add("年龄")
dataTable.Columns.Add("性别")
dataTable.Rows.Add(New String() {"张红", "22", "女"})
dataTable.Rows.Add(New String() {"王东", "25", "男"})
'填充数据到PDF表格
table.DataSource = dataTable
'显示表头(默认不显示)
table.Style.ShowHeader = True
'在BeginRowLayout事件处理方法中注册自定义事件
AddHandler table.BeginRowLayout, AddressOf Table_BeginRowLayout
'将表格绘入PDF并指定位置和大小
table.Draw(page, New RectangleF(0, 20, 200, 90))
'保存到文档
doc.SaveToFile("PDF表格_1.pdf")
End Sub
'在自定义事件中设置行高
Private Shared Sub Table_BeginRowLayout(sender As Object, args As BeginRowLayoutEventArgs)
args.MinimalHeight = 20F
End Sub
通过 PdfGrid 创建表格
创建一个简单的表格
C#
//创建一个PDF文档
PdfDocument doc = new PdfDocument();
//添加一页
PdfPageBase page = doc.Pages.Add();
//创建一个PdfGrid对象
PdfGrid grid = new PdfGrid();
//设置单元格边距
grid.Style.CellPadding = new PdfPaddings(1, 1, 1, 1);
//添加2行4列
PdfGridRow row1 = grid.Rows.Add();
PdfGridRow row2 = grid.Rows.Add();
grid.Columns.Add(4);
//设置列宽
foreach (PdfGridColumn col in grid.Columns)
{
col.Width = 60f;
}
//写入数据
for (int i = 0; i < grid.Columns.Count; i++)
{
row1.Cells[i].Value = String.Format("col{0}", i + 1);
row2.Cells[i].Value = String.Format("{0}", i + 1);
}
//将表格绘入文档
grid.Draw(page, new PointF(0, 20));
//保存到文档
doc.SaveToFile("PDF表格_2.pdf");
VB.NET
'创建一个PDF文档
Dim doc As New PdfDocument()
'添加一页
Dim page As PdfPageBase = doc.Pages.Add()
'创建一个PdfGrid对象
Dim grid As New PdfGrid()
'设置单元格边距
grid.Style.CellPadding = New PdfPaddings(1, 1, 1, 1)
'添加2行4列
Dim row1 As PdfGridRow = grid.Rows.Add()
Dim row2 As PdfGridRow = grid.Rows.Add()
grid.Columns.Add(4)
'设置列宽
For Each col As PdfGridColumn In grid.Columns
col.Width = 60F
Next
'写入数据
For i As Integer = 0 To grid.Columns.Count - 1
row1.Cells(i).Value = [String].Format("col{0}", i + 1)
row2.Cells(i).Value = [String].Format("{0}", i + 1)
Next
'将表格绘入文档
grid.Draw(page, New PointF(0, 20))
'保存到文档
doc.SaveToFile("PDF表格_2.pdf")
合并单元格,设置背景色和文字对齐方式
C#
//创建PDF文档
PdfDocument doc = new PdfDocument();
//添加一页
PdfPageBase page = doc.Pages.Add();
//创建一个PdfGrid对象
PdfGrid grid = new PdfGrid();
//设置单元格边距
grid.Style.CellPadding = new PdfPaddings(1, 1, 1, 1);
//设置表格默认字体
grid.Style.Font= new PdfTrueTypeFont(new Font("宋体", 9f), true);
//添加4行4列
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 = 60f;
}
//写入数据
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 = "2016/06/02";
row3.Cells[2].Value = "阳光地产";
row3.Cells[3].Value = "是";
row4.Cells[0].Value = "00224";
row4.Cells[1].Value = "2016/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.Justify, PdfVerticalAlignment.Middle);
//设置单元格背景颜色
row1.Cells[0].Style.BackgroundBrush = PdfBrushes.Gray;
row3.Cells[3].Style.BackgroundBrush = PdfBrushes.Green;
row4.Cells[3].Style.BackgroundBrush = PdfBrushes.MediumVioletRed;
//设置边框颜色、粗细
PdfBorders borders = new PdfBorders();
borders.All = new PdfPen(Color.Black, 0.1f);
foreach (PdfGridRow pgr in grid.Rows)
{
foreach (PdfGridCell pgc in pgr.Cells)
{
pgc.Style.Borders = borders;
}
}
//在指定为绘入表格
grid.Draw(page, new PointF(0, 20));
//保存到文档
doc.SaveToFile("PDF表格_3.pdf");
VB.NET
'创建PDF文档
Dim doc As New PdfDocument()
'添加一页
Dim page As PdfPageBase = doc.Pages.Add()
'创建一个PdfGrid对象
Dim grid As New PdfGrid()
'设置单元格边距
grid.Style.CellPadding = New PdfPaddings(1, 1, 1, 1)
'设置表格默认字体
grid.Style.Font = New PdfTrueTypeFont(New Font("宋体", 9F), True)
'添加4行4列
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)
'设置列宽
For Each col As PdfGridColumn In grid.Columns
col.Width = 60F
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 = "2016/06/02"
row3.Cells(2).Value = "阳光地产"
row3.Cells(3).Value = "是"
row4.Cells(0).Value = "00224"
row4.Cells(1).Value = "2016/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.Justify, PdfVerticalAlignment.Middle)
'设置单元格背景颜色
row1.Cells(0).Style.BackgroundBrush = PdfBrushes.Gray
row3.Cells(3).Style.BackgroundBrush = PdfBrushes.Green
row4.Cells(3).Style.BackgroundBrush = PdfBrushes.MediumVioletRed
'设置边框颜色、粗细
Dim borders As New PdfBorders()
borders.All = New PdfPen(Color.Black, 0.1F)
For Each pgr As PdfGridRow In grid.Rows
For Each pgc As PdfGridCell In pgr.Cells
pgc.Style.Borders = borders
Next
Next
'在指定为绘入表格
grid.Draw(page, New PointF(0, 20))
'保存到文档
doc.SaveToFile("PDF表格_3.pdf")