使用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); } }
