在利用itext将html文件转化为pdf文件的过程中,需要适当的调整字体,下面介绍字体的使用样式:
- 字体支持的样式
itext核心库中主要支持一下几个各种的字体文件:.AFM
/.PFB/.TTF/.otf/.ttc/.wof
2. 利用DefaultFontProvider
只是支持 14 Standard Type 1 fonts and 12 fonts
主要字体的参见样式:
- standard Type 1 fonts所支持的几种字体格式。
- iText附带的字体样式:可以参见官方文档。
- 系统字体
C:\Windows\Fonts
字体主要的引入方式
1、添加特定的字体(addFont())
public static final String FONT = "src/main/resources/fonts/cardo/Cardo-Regular.ttf";
public void createPdf(String src, String font, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider();
FontProgram fontProgram = FontProgramFactory.createFont(font);
fontProvider.addFont(fontProgram);
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(new File(src), new File(dest), properties);
}
2、可以指定文件夹,一次引入多种字体
public static final String FONTS = "src/main/resources/fonts/cardo/"; //指示特定的文件夹
public void createPdf(String src, String fonts, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider();
fontProvider.addDirectory(fonts); //添加路径而不是添加字体
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(new File(src), new File(dest), properties);
}
3、有顺序的一次引入多种字体
首先将字体定义在数组中
public static final String[] FONTS = {
"src/main/resources/fonts/noto/NotoSans-Regular.ttf",
"src/main/resources/fonts/cardo/Cardo-Regular.ttf"
};
利用for循环加入多种字体
public void createPdf(String src, String[] fonts, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider(false, false, false);
for (String font : fonts) {
FontProgram fontProgram = FontProgramFactory.createFont(font);
fontProvider.addFont(fontProgram);
}
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(new File(src), new File(dest), properties);
}
4、字符编码的国际化
有两种方式解决字符编码问题:
- 在html原文件中加上字符编码:
<meta charset="UTF-8">
2. 在转化的过程中加上标准支持各种格式的字体(这种方法麻烦)
public static final String[] FONTS = {
"src/main/resources/fonts/noto/NotoSans-Regular.ttf",
"src/main/resources/fonts/noto/NotoSans-Bold.ttf",
"src/main/resources/fonts/noto/NotoSansCJKsc-Regular.otf", //支持中文
"src/main/resources/fonts/noto/NotoSansCJKjp-Regular.otf",
"src/main/resources/fonts/noto/NotoSansCJKkr-Regular.otf",
"src/main/resources/fonts/noto/NotoNaskhArabic-Regular.ttf",
"src/main/resources/fonts/noto/NotoSansHebrew-Regular.ttf"
};
public void createPdf(String src, String[] fonts, String dest) throws IOException {
ConverterProperties properties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider(false, false, false);
for (String font : fonts) {
FontProgram fontProgram = FontProgramFactory.createFont(font);
fontProvider.addFont(fontProgram);
}
properties.setFontProvider(fontProvider);
HtmlConverter.convertToPdf(new File(src), new File(dest), properties);
}