时间的法外狂徒

导航

itext生成pdf如何使用windows系统下的各种字体

一、首先是,使用windows字体的正常方式。

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

 

createFont(String name, String encoding, boolean embedded),
1、name参数是字体路径,该字体是黑体常规,如图:
2、encoding,是字体的编码方式,BaseFont.IDENTITY_H在源码中的意思是:带有垂直书写的Unicode编码,源码解释如下:
    /** The Unicode encoding with horizontal writing.
     */
    public static final String IDENTITY_H = "Identity-H";

3、embedded,是个boolean值,如果字体要嵌入到PDF中,则为true。

二、如何准确的找到windows下的字体
首先去C:/WINDOWS/Fonts,这个文件夹下来选择想要使用的字体,例如,使用楷体 常规字体,:

 

 1、右键打开属性,会看到文件名,如图:

 

 2、复制文件名到代码中,即可使用。

另外,需要注意的几点是:

1、有些字体是文件夹,需要打开后才能查看属性,如图:

                                  

 

 

 2、有些字体文件后缀名为ttc,是需要多选的,代码如下:

BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/simsun.ttc,0", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

数字是它有取决于他有几个可选项,从0开始。

可以打开文件后,通过下一步来查看:

 

 如果数字写错,也可以通过报错信息查看它的范围:

Exception in thread "main" com.itextpdf.text.DocumentException: The font index for C:/WINDOWS/Fonts/simsun.ttc must be between 0 and 1. It was 3.
    at com.itextpdf.text.pdf.TrueTypeFont.process(TrueTypeFont.java:656)
    at com.itextpdf.text.pdf.TrueTypeFontUnicode.process(TrueTypeFontUnicode.java:122)
    at com.itextpdf.text.pdf.TrueTypeFontUnicode.<init>(TrueTypeFontUnicode.java:99)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:706)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:626)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:461)
    at pdf.Pdf556Custom.main(Pdf556Custom.java:21)

,它会提示你,只能在0和1中选择,不能选择3.

就算这个世道烂成一堆粪坑,那也不是你吃屎的理由

posted on 2019-10-21 17:12  抄手砚  阅读(3452)  评论(0编辑  收藏  举报