【问题标题】:Loading Fonts from Jar while writing PDF-A (archive) file在编写 PDF-A(存档)文件时从 Jar 加载字体
【发布时间】:2014-10-29 07:01:45
【问题描述】:

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

【问题讨论】:

  • 解决了这样的问题 - (1) 将 .ttf 文件放在“com/mycompany/pdfutility/fonts”目录下,并将它们包含在 jar 文件中。 (2) 在代码中引用这个文件是这样的:Font BOLD_10 = FontFactory.getFont("/com/mycompany/pdfutility/fonts/FreeSansBold.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 10);

标签: java fonts itext itextpdf


【解决方案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);

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2013-07-18
    • 2019-08-17
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2019-11-22
    相关资源
    最近更新 更多