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.
就算这个世道烂成一堆粪坑,那也不是你吃屎的理由