com.itextpdf.io.IOException: Type of font xxxx is not recognized.

前段时间在做生成pdf的时候遇到这个报错,总结一下。

pom结构:


    
        org.springframework.boot
        spring-boot-starter
    

    
        org.springframework.boot
        spring-boot-starter-test
        test
        
            
                org.junit.vintage
                junit-vintage-engine
            
        
    
  
    
        com.itextpdf
        layout
        7.0.3
    

    
        com.itextpdf
        forms
        7.0.3
    

    
        com.itextpdf
        font-asian
        7.0.3
    

关键代码:

String path = System.getProperty("user.dir")+"\\src\\main\\resources\\";
错误示范:
PdfFont bfChinese =
        PdfFontFactory.createFont(path+"msyh.ttc", PdfEncodings.IDENTITY_H,true);

正确姿势:

PdfFont bfChinese =
        PdfFontFactory.createFont(path+"msyh.ttc,0", PdfEncodings.IDENTITY_H,true);

问题解决:

由于生成iText插件生成pdf的时候中文会显示不出来,遇到过的是"凉"字,查到是字体库的原因,网上下载字体库msyh.ttc,生成的时候指定字体库,就可以解决了,小bug一枚。

附上点儿代码:

private static Boolean tranPdf(Map map) {
    // 模板地址
    String filePath = "C:/Users/kerberos/Desktop/11111/source.pdf";
    // 填完信息后生成新的模板地址
    String toPath = "C:/Users/kerberos/Desktop/11111/target.pdf";
    try {
        String path = System.getProperty("user.dir")+"\\src\\main\\resources\\";
        System.out.println(filePath);
        PdfFont bfChinese =
                PdfFontFactory.createFont(path+"msyh.ttc", PdfEncodings.IDENTITY_H,true);
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(filePath), new PdfWriter(toPath));
        PdfAcroForm pdfAcroForm = PdfAcroForm.getAcroForm(pdfDoc, true);
        pdfAcroForm.getField("projectId_0").setValue("####################");
        pdfAcroForm.getField("projectId_1").setValue("凉凉凉凉凉凉凉凉凉凉凉凉凉凉凉").setFont(bfChinese);
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
        String cmmitTime = simpleDateFormat.format(date);
        pdfAcroForm.getField("time").setValue(cmmitTime);
        pdfAcroForm.getField("hashValue").setValue(map.get("key").toString());
        pdfAcroForm.flattenFields();
        pdfDoc.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

 

 

你可能感兴趣的:(SpringBoot,iText,java)