遇到 com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

    xiaoxiao2021-04-15  48

    在利用iText.jar和iTextAsian.jar生成pdf文件时有时遇到了

    Exception in thread "main" com.lowagie.text.DocumentException: Font 'STSong-Light' with 'UniGB-UCS2-H' is not recognized.

    at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source) at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source) at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source) at timer.TestPdf.getPdf(TestPdf.java:34)

    at timer.TestPdf.main(TestPdf.java:21)

    这个错误。

    经过查看iText-2.1.5.jar中的源码发现了在CJKFont.class中有这样两行代码

     

     InputStream inputstream = getResourceStream("com/lowagie/text/pdf/fonts/cjkfonts.properties");             cjkFonts.load(inputstream);             inputstream.close();             inputstream = getResourceStream("com/lowagie/text/pdf/fonts/cjkencodings.properties");             cjkEncodings.load(inputstream);             inputstream.close();

    这是通过iTextAsian.jar中的配置文件来取字符编码的,由于iText.jar版本的不同,目录文件做了改动,例如在iText-5.0.6.jar中变成了下面这样

     

     

    InputStream is = getResourceStream("com/itextpdf/text/pdf/fonts/cjkfonts.properties"); cjkFonts.load(is); is.close(); is = getResourceStream("com/itextpdf/text/pdf/fonts/cjkencodings.properties"); cjkEncodings.load(is); is.close();

     

     

    所以我们只需要调整iTextAsian.jar的目录结构即可。也可以像我这样为了适应2个版本的iText.jar,我建了2个目录如下。

     

    特别提醒:在向pdf表单写入中文时,如果用默认的表单可能会出现中文不显示的问题,建议将默认生成的删掉,自己手动添加上去,并把字体设置为“宋体”。

     

    转载请注明原文地址: https://ju.6miu.com/read-671866.html

    最新回复(0)