1、如何处理中文
首先,确保本地存在中文字体,我选择的是simsunb.ttf(当然你选择其他的也可以),如果在系统盘windows/fonts目录下没有,去google download一个也是可以的,在生成pdf时,指定simsunb.ttf的路径,然后在pdf中new chunk或者phrase之类的,指明某一种font就okay了,至于chunk和phrase内容是中文还是英文,都是可以的了。
string fontpath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath + "Fonts\\simsun.ttf";
BaseFont basefont = BaseFont.CreateFont(fontpath, BaseFont.IDENTITY_H, BaseFont.Normal);
Font font = new Font(basefont, 12F, Font.NORMAL);
Chunk mychunk = new Chunk("好好学习,天天向上",font );
document.Add(mychunk );
2、如何自定义边框
PdfPTable中imageCell.Border =PdfPCell.NO_BORDER表示隐藏所有的边框,imageCell.DisableBorderSide()有四个参数1,2,4,8,分别代表一个单元格的上下左右边框,因此imageCell.DisableBorderSide(2)代表下边框不显示。
3、如何保证条码不被分割显示在不同页面
我是找了好久才找到这个方法,pdftable.KeepTogether = true;花了很多时间去Google,最后还是点出来的,这也是一个学习方法,根据名字大概猜出是什么意思,看来在开发过程中给方法取名字还是很重要的。
4、如何重复显示表头
在导出bom过程中,需要在每一页最上面显示表头,pdftable.HeaderRows= 2表示重复显示第二行。
//pdftable.FooterRows = 2;
5、如何实现换行
Paragraph p = new Paragraph(new Chunk(Environment.NewLine,basefont);
document.Add(p);
6、如何添加第几页,共几页
这个功能实现比较麻烦,也是Google了很久,代码如下。
Document document = new Document(PageSize.A4.Rotate(), 0, 0, 10, 33); -----生成横着的文档
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(fullpath,FileMode.Create));
MyPdfPageEventHelpPageNo pageeventhandler = new MyPdfPageEventHelpPageNo();
writer.PageEvent = pageeventhandler;
public class MyPdfPageEventHelpPageNo: iTextSharp.text.pdf.PdfPageEventHelper
{
protectedPdfTemplate total;
protectedBaseFont helv;
public override voidOnOpenDocument(PdfWriter writer, Document document)
{
total =writer.DirectContent.CreateTemplate(50, 50);
total.BoundingBox = new Rectangle(-20,-20, 100, 100);
stringfontpath = System.Web.HttpContext.Current.Request.PhysicalApplicationPath+ "MAIN\\Fonts\\simsun.ttf";
helv = BaseFont.CreateFont(fontpath,BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
}
public override voidOnEndPage(PdfWriter writer, Document document)
{
PdfContentBytecb = writer.DirectContent;
cb.SaveState();
stringtext = "第" +writer.PageNumber + "页,共";
floatlen = helv.GetWidthPoint(text, 9);
cb.BeginText();
cb.SetFontAndSize(helv, 9);
cb.SetTextMatrix(400, 20);
cb.ShowText(text);
cb.EndText();
cb.AddTemplate(total, 400 + len,20);
cb.RestoreState();
}
public override voidOnCloseDocument(PdfWriter writer, Document document)
{
total.BeginText();
total.SetFontAndSize(helv, 9);
intpageNumber = writer.PageNumber - 1;
total.ShowText(Convert.ToString(pageNumber)+"页");
total.EndText();
}
}
7、如何禁止行分割
pdftable.SplitLate = false;
pdftable.SplitRows = false;
8、设置表格列宽度
pdftable.SetWidths(new int[9]{30,140,130,180,40,175,90,55,120});
附itextsharp文档地址 http://www.afterlogic.com/mailbee-net/docs-itextsharp/Index.html