itextpdf使用中文字体的三种方式 - 抄手砚

时间:2024-02-19 15:44:01

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