写在前面:笔者属于萌新,本文只是记录在开发中的经验,如有错漏,请大家不吝赐教。
1.字体设定:
string fontPath = Server.MapPath("Fonts/" + "SourceHanSerif-VF.ttf.ttc,0");
BaseFont baseFont =BaseFont.CreateFont(fontPath,BaseFont.IDENTITY_H,
BaseFont.NOT_EMBEDDED);
Font titleFont = new Font(baseFont, 10);
笔者使用的是思源宋体,可以免费使用。虽然其他教程中也提到,可以使用Windows自带的字体,但是笔者去搜索了一下其中看中的一个字体,似乎不能免费商用。大家在使用字体时也要注意这个情况。
2.创建表格:
PdfPTable table = new PdfPTable(8);
table.TotalWidth = 500f;
table.LockedWidth = true;
float[] widths = new float[] { 1f,6f,1f,1f,1f,1f,1f,2f};
table.SetWidths(widths);
创建表格时,标明列数;规定好宽度后,可在SetWidths中设置各个列所占的宽度比例,注意个数应跟列数一致。此处1f指占1份,也就是(1+6+1+1+1+1+1+2)中的1份。
3.单元格的设定:
PdfPCell cell = new PdfPCell(new iTextSharp.text.Phrase("标题",titleFont));
//水平占据8列的空间
cell.Colspan = 8;
//水平居中对齐
cell.HorizontalAlignment = Element.ALIGN_CENTER;
//垂直居中对齐
cell.VerticalAlignment = Element.ALIGN_MIDDLE;
//将单元格加入至表格中
table.AddCell(cell);
在创建单元格时,将创建好的Font对象放进去,就可以使用中文了。但笔者使用的字体似乎有些软件解析不出来,但wps、Edge跟Chrome都没问题。
横向合并单元格可以使用Colspan属性,需要合并几列就写几。
Element.ALIGN_CENTER和Element.ALIGN_MIDDLE都是常量,分别为1和5,对应着水平方向和竖直方向的居中。
4.竖直方向的行合并:
行合并不能使用Rowspan。假设我们有一个两行两列的表格,要合并左侧列中的两个单元格,则实际上,创建一个两列的表格,左侧正常输入单元格内容,右侧单元格则插入一个两行一列的表格。