1

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

4

2 回答 2

2

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

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

于 2014-10-29T09:26:22.923 回答
1

如果你使用 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

于 2016-10-10T04:16:29.747 回答