如何通过字体名字符串加载PDType1Font?PDFBox 2.0.x实现咨询
在PDFBox 2.0.x中通过字体名称加载PDType1Font的方法
PDFBox 2.0.x版本依然支持通过字体名称加载标准14种Type1字体,不过实现方式和1.8.x版本有所区别:
- 直接使用
PDType1Font类的静态常量引用,比如PDType1Font.HELVETICA、PDType1Font.TIMES_ROMAN等,这些常量一一对应标准14种字体。 - 若需要通过字符串名称动态加载,可自行构建字体名称与静态常量的映射关系,示例代码如下:
import org.apache.pdfbox.pdmodel.font.PDType1Font; import java.util.Map; import java.util.HashMap; public class StandardFontLoader { private static final Map<String, PDType1Font> STANDARD_FONT_MAP = new HashMap<>(); static { STANDARD_FONT_MAP.put("Helvetica", PDType1Font.HELVETICA); STANDARD_FONT_MAP.put("Helvetica-Bold", PDType1Font.HELVETICA_BOLD); STANDARD_FONT_MAP.put("Helvetica-Oblique", PDType1Font.HELVETICA_OBLIQUE); STANDARD_FONT_MAP.put("Helvetica-BoldOblique", PDType1Font.HELVETICA_BOLD_OBLIQUE); STANDARD_FONT_MAP.put("Times-Roman", PDType1Font.TIMES_ROMAN); STANDARD_FONT_MAP.put("Times-Bold", PDType1Font.TIMES_BOLD); STANDARD_FONT_MAP.put("Times-Italic", PDType1Font.TIMES_ITALIC); STANDARD_FONT_MAP.put("Times-BoldItalic", PDType1Font.TIMES_BOLD_ITALIC); STANDARD_FONT_MAP.put("Courier", PDType1Font.COURIER); STANDARD_FONT_MAP.put("Courier-Bold", PDType1Font.COURIER_BOLD); STANDARD_FONT_MAP.put("Courier-Oblique", PDType1Font.COURIER_OBLIQUE); STANDARD_FONT_MAP.put("Courier-BoldOblique", PDType1Font.COURIER_BOLD_OBLIQUE); STANDARD_FONT_MAP.put("Symbol", PDType1Font.SYMBOL); STANDARD_FONT_MAP.put("ZapfDingbats", PDType1Font.ZAPF_DINGBATS); } public static PDType1Font getStandardFont(String fontName) { return STANDARD_FONT_MAP.get(fontName); } }
- 还可以使用
PDFontFactory.createFont方法,传入字体名称字符串即可加载,该方法会自动识别标准字体,示例:
PDFont font = PDFontFactory.createFont("Helvetica");
注意:使用
PDFontFactory.createFont时,若传入的名称不属于标准14种字体,方法会尝试加载系统中的对应字体,可能抛出异常,需做好异常处理。
内容的提问来源于stack exchange,提问作者SemmelJochen
相关产品推荐
相关产品推荐

