在编写PDF-A(存档)文件时从Jar加载字体

时间:2014-10-29 07:01:46

标签: java fonts itext itextpdf

我正在使用PdfAWriter创建PDF-A(PDF存档格式)文件,并使用.ttf在PDF中嵌入字体。我的TTF文件在config文件夹下。 当我尝试创建如下所示的字体时,它可以在本地工作

Font BOLD_10 = FontFactory.getFont("./config/FreeSansBold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);

Document document; //Document created using PDF-A writer

PdfPTable table = new PdfPTable(new float[] { 50,50 });
table.setWidthPercentage(new Float(100));

Paragraph paragraph = new Paragraph("Header 1", BOLD_10);
document.add(paragraph);

如果我尝试构建一个jar文件并将.tff放在jar中,下面的代码不起作用,因为它无法找到ttf文件的路径:

字体BOLD_10 = FontFactory.getFont(“./ config / FreeSansBold.ttf”,BaseFont.IDENTITY_H,BaseFont.EMBEDDED,10);

如何配置我的字体文件路径以从jar动态选择?

我们尝试使用内置字体和BaseFont而不是.ttf,但它们对于“PDF-A”文件不起作用(在运行时抛出异常)。

除了使用TTF之外,还有其他方法可以在PDF-A文件中嵌入字体吗?

2 个答案:

答案 0 :(得分:1)

解决了这样的问题 - (1)将.ttf文件放在" com / mycompany / pdfutility / fonts"目录并将它们包含在jar文件中。 (2)在这样的代码中引用此文件:

字体BOLD_10 = FontFactory.getFont(" /com/mycompany/pdfutility/fonts/FreeSansBold.ttf" ;, BaseFont.IDENTITY_H,BaseFont.EMBEDDED,10);

答案 1 :(得分:0)

如果你使用iText 7,你可以试试这个:

首先将您的font.ttf文件放在资源目录中,例如fonts/simsun.ttf

然后,

    byte[] fontByte = IOUtils.toByteArray(Main.class.getResource("/fonts/simsun.ttf").openStream());
    PdfFont font = PdfFontFactory.createFont(fontByte, PdfEncodings.IDENTITY_H);

IOUtils来自commons-io