itextpdf使用中文字体、PdfPTable中图片缩放

	最近的项目中遇到了使用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;
    }
}
您可以使用 iTextPDF 的 AcroFields 类与 PdfPTable 类结合使用来创建带有表单字段的 PDF 文档。 首先,您需要创建一个 PdfPTable 对象来定义您的表格。然后,您可以使用 AcroFields 类的 setField() 方法将表格的数据填充到 PDF 表单字段。 以下是一个示例代码片段,演示了如何使用 AcroFields 和 PdfPTable 结合使用: ```java import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.AcroFields; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import java.io.FileOutputStream; import java.io.IOException; public class AcroFieldsPdfPTableExample { public static void main(String[] args) { Document document = new Document(); try { // 创建 PDFWriter 对象,并指定输出文件路径 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); // 打开文档 document.open(); // 创建 AcroFields 对象,并加载 PDF 表单模板 AcroFields acroFields = writer.getAcroFields(); acroFields.setFields("template.pdf"); // 创建 PdfPTable 对象 PdfPTable table = new PdfPTable(2); // 添加表格内容 PdfPCell cell1 = new PdfPCell(); cell1.addElement(acroFields.getField("field1")); // 将表单字段添加到单元格 table.addCell(cell1); PdfPCell cell2 = new PdfPCell(); cell2.addElement(acroFields.getField("field2")); // 将表单字段添加到单元格 table.addCell(cell2); // 将表格添加到文档 document.add(table); // 关闭文档 document.close(); System.out.println("PDF 文件已生成!"); } catch (IOException | DocumentException e) { e.printStackTrace(); } } } ``` 请注意,上述示例假设您已经有一个名为 "template.pdf" 的包含表单字段的 PDF 模板文件。您需要在代码相应地更改模板文件的路径。 希望这可以帮助到您!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值