最近的项目中遇到了使用pdf导出数据的场景。特此记录下突出的两个问题
1、使用中文字体
在itextpdf的jar包中,一般使用的是自带的字体:STSong-Light,但是这种字体在打印出来后,很瘦且模糊,不适用于正式的文件,比如机关单位、医院、事业单位等。
所以,在这里将字体替换为系统中的宋体,也可以替换为系统中的其他字体。路径是系统盘下的fonts,如果没有想要的字体,可以自行下载并保存下来进行使用。因为宋体、仿宋都是同一个文件名称,所以后面的索引用了0,表示引用宋体,修改为1,则引用仿宋。
BaseFont chinese = BaseFont.createFont("c:\\windows\\fonts\\simsun.ttc,0", BaseFont.IDENTITY_H , BaseFont.EMBEDDED);
2、PdfPTable中图片缩放
此处的使用场景为:导出的pdf中需要保存电子签名。在审批流程中,会存在多个电子签名,便使用PdfPTable轮询添加数据。
一开始想的是对图片进行处理,但是缩放方法全部失效,后转而进行单元格的大小处理从而实现缩放图片。
public class PdfProductUtil {
public static PdfPCell productCellOne(String value, Font font){
PdfPCell cell = new PdfPCell(new Phrase(value,font));
// 水平居中
// cell.setHorizontalAlignment(Element.ALIGN_CENTER);
// 垂直居中
// cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
// 高度
cell.setFixedHeight(20);
return cell;
}
}