表格是一种直观高效的数据展示方式,可以按行和列的形式呈现数据,从而更容易吸引读者的注意。相比于普通文本内容,表格能够更清晰地反映数据之间的关系,降低阅读难度,加深读者对数据的理解。本文将介绍如何使用 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 文件可以从此链接下载或通过 安装。
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 天的临时许可证。