itextpdf使用中文字体的三种方式
使用itextpdf时,默认的字体没有中文,总结了一下使用中文字体的方式。
1、使用windows系统下的字体,该种方式的具体操作可以看另一篇博客:https://www.cnblogs.com/whalesea/p/11714681.html
2、使用自己的字体资源,可以是在别的地方下载的资源,也可以是吧windows的字体资源复制到项目内使用。
3、使用iTextAsian.jar中的字体,这是一个itext支持中文的包,可以使用其中字体。该包在有个问题经常会导致报错,具体原因大致为:在itext5.x版本对font和encoding文件都是从 RESOURCE_PATH = “com/itextpdf/text/pdf/fonts/”加载的,而itextasian1.5.x.jar的包名是com.lowagie.text.pdf.fonts, 包名不一致,导致路径错误
下面是统一的代码演示:
package dbzx.pdf; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.junit.Test; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; import com.itextpdf.text.pdf.PdfWriter; public class FontTest { /** * 生成pdf文件 */ public void createPdf(Font font) throws FileNotFoundException, DocumentException { String path = "E:/demo/pdfCreat/"+System.currentTimeMillis()+".pdf"; File file = new File(path); file.getParentFile().mkdirs(); Document doc = new Document(PageSize.A4); PdfWriter.getInstance(doc, new FileOutputStream(file)); doc.open(); doc.add(new Paragraph("字体测试",font)); doc.close(); } @Test /** * 使用windows系统下的字体,new Font方式 */ public void test1_1() throws DocumentException, IOException { String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径 BaseFont bf = BaseFont.createFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Font font = new Font(bf, 10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } @Test /** * 使用windows系统下的字体,FontFactory方式 */ public void test1_2() throws DocumentException, IOException { String path = "C:/WINDOWS/Fonts/simhei.ttf";//windows里的字体资源路径 Font font = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } @Test /** * 使用自己查找的字体,FontFactory方式 */ public void test2() throws DocumentException, IOException { String path = "src/main/resources/file/pdf/font/SIMYOU.TTF";//自己的字体资源路径 Font font = FontFactory.getFont(path, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } /** * 使用iTextAsian.jar中的字体,FontFactory方式 */ @Test public void test3() throws DocumentException, IOException { Font font = FontFactory.getFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED,10f, Font.NORMAL, BaseColor.BLACK); createPdf(font); } }