最近在用itext这一开源库生成pdf文件,小有所悟,故写下。
一、基本流程
第一步,创建一个 iTextSharp.text.Document对象的实例:
Document document = new Document();
第二步,为该Document创建一个Writer实例:
PdfWriter.getInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));
第三步,打开当前Document
document.Open();
第四步,为当前Document添加内容:
document.Add(new Paragraph("Hello World"));
第五步,关闭Document
document.Close();
二、关于中文字体
三种方法
方法一:使用Windows系统字体(TrueType)
方法二:使用iTextAsian.jar中的字体方法三:使用资源字体(ClassPath)
//方法一:使用Windows系统字体(TrueType)
BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
//方法二:使用iTextAsian.jar中的字体
//BaseFont baseFont = BaseFont.createFont("STSong-Light",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
//方法三:使用资源字体(ClassPath)
BaseFont baseFont = BaseFont.createFont("/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
通常,方法一不会别选用,因为需要系统资源,不确定性太大。
方法二,这种方法虽然能够正常地显示中文信息,但是有一个缺点,就是只有一种字体。因为iText官方网站提供的iTextAsian.jar包中只包 含几种简单的亚洲字体,对于简体中文来说,只有宋体。因此,采用这种方法生成的PDF中,中文字体只能为宋体,无法显示其他字体。
所以,还是选择方法三。选择方法三,需要注意两点。
1、对于宋体,需要表示为 "SIMSUN.TTC,1"。2、在生成PDF的时候,程序会从类路径中查找这个字体文件,可以选择把字体文件放到类路径中。
三、关于图片
1、图片顺序,默认会自动调整,所以在创建Wirter时,需要设置相关内容。
writer.setStrictImageSequence(true);
2、图片分辨率
将图片生成到pdf里面结果图片的DPI 与生成之后PDF 分辨率不一样导致打印出来的不行。
DPI:“dot per inch”的缩写,就是指在每英寸长度内的点数。在Photoshop中文版中可以看到中文解释是“分辨率”的一种表示方式原本图片DPI就是96,PDF生成的总是72。
img.scalePercent(75f);
3、图片缩放
public void scaleAbsolute(int newWidth, int newHeight)直接设定显示尺寸
public void scalePercent(int percent)设定显示比例
public void scalePercent(int percentX, int percentY)根据高宽设定显示比例
四、关于表格
1、锁定表头:table.setHeaderRows(1);
2、缓解内存压力:table.setComplete(false);
3、表格跨页显示:table.setSplitRows(false);