如何加载自定义字体在FontFactory.register在iText的(How to load

2019-10-24 09:45发布

我需要你在添加自定义字体“ARIAL.TTF”,这是存储在资源文件夹下,我在该项目的帮助FontFactory.register在iText的方法。

字体路径是在从Windows Explorer中的项目如下:

的public_html \资源\ Fonts \中ARIAL.TTF

用于参考的字体的代码是:

FontFactory.register("/resources/fonts/arial.ttf", "my_bold_font");
Font myBoldFont = FontFactory.getFont("my_bold_font");

然而,当我跑的Java方法,它总是给我的错误:

产生java.io.IOException:/resources/fonts/arial.ttf没有找到作为文件或资源。

我试图与例如不同的路径:

/public_html/resources/fonts/arial.ttf

../resources/fonts/arial.ttf

/fonts/arial.ttf

/arial.ttf

但结果是一样的,该文件无法找到。 因此,如何引用这个文件?

Answer 1:

你可以得到的“字体”,这是目前在资源文件夹,使用的路径contextClassLoader ,可以在使用FontFactory文件路径。

URL font_path = Thread.currentThread().getContextClassLoader().getResource("fontname");
FontFactory.register(font_path.toString(), "test_font");

我已经测试此代码,它工作正常。



Answer 2:

该代码做的:

 FontFactory.register(System.getProperty("file.separator")+"resources"+System.getProperty("file.separator")+"fonts"+System.getProperty("file.separator")+"arial.‌​ttf", "my_bold_font");
 Font myBoldFont = FontFactory.getFont("my_bold_font");


Answer 3:

我曾尝试本作将被存储在一个文件夹中的“SRC /主/ web应用/资源/字体”到XMLWorkerFontProvider所有字体。

它成功地工作。

XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);

URL font_path = Thread.currentThread().getContextClassLoader().getResource("resources/fonts");

File directory = new File(font_path.getPath());

//get all the files from a directory

File[] fList = directory.listFiles();

for (File file : fList){

    System.out.println("Font File Path******************************   " +file.getPath());
    fontImp.register(file.getPath());
} 
FontFactory.setFontImp(fontImp);

Document document = new Document();
Rectangle one = new Rectangle(width,height);
document.setPageSize(one);
document.setMargins(1, 1, 1, 1);
ByteArrayOutputStream bos1 = new ByteArrayOutputStream();
PdfWriter pdfWriter=PdfWriter.getInstance(document, new FileOutputStream(folderPath+"/"+fileName));
document.open();

InputStream is = new ByteArrayInputStream(html.getBytes());
//XMLWorkerHelper.getInstance().parseXHtml(pdfWriter,document, is);
XMLWorkerHelper.getInstance().parseXHtml(pdfWriter,document, is, null, null,fontImp);
document.close();


文章来源: How to load custom font in FontFactory.register in iText