我正在使用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文件中嵌入字体吗?
答案 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