这是我的Resources.class中的一种方法:
public static Font loadFont(String fontFileName) { BaseFont base = null; try { base = BaseFont.createFont(Resource.class.getResource(fontFileName + "_font.ttf").toString(), BaseFont.WINANSI, true); } catch (DocumentException | IOException e) { e.printStackTrace(); } Font font = new Font(base, Font.BOLD, 15); return font; }
我的程序的结构是:
src (folder) core (package) //all (but one) classes used for program resources (package) class Resources (used to load resources into the "core" classes) wingding_font.ttf
这是不起作用的代码片段:
p = new Phrase("some random text"); p.setFont(Resource.loadFont("wingding")); pa = new Paragraph(p); pa.setFont(Resource.loadFont("wingding")); document.add(pa);
当我打开PDF时,文本在那里,但是使用了一些字体(我猜是默认字体)。
注意1:我尝试将字体设置为仅短语(p)和仅段落(pa),但这丝毫没有改变输出。
注意2:Resource.loadFont(“ wingding”); try / catch方法没有“捕获”任何错误。
尝试创建一个嵌入的字体对象,并使用此字体呈现文本:
//this code should run once at initialization/application startup FontFactory.register("resources/wingding_font.ttf"); Font textFont = FontFactory.getFont("wingding", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10); //10 is the size ... //reuse the reference to the font object when rendering your text Paragraph p = new Paragraph("someText", textFont);
顺便说一下,iText具有FontFactory帮助加载字体的类,您不再需要中的loadFont方法Resources。
FontFactory
loadFont
Resources
希望能帮助到你。