在Java中使用FUTURA字体创建pdf

时间:2019-10-03 06:53:37

标签: java itext

在这里,我正在使用FUTURA字体创建pdf,但是我的BaseFont.createFont方法给出了错误。当前,已成功使用Halvetica字体创建PDF,但我希望使用FUTURA字体创建PDF。

在这里,我正在使用itextpdf5.5.13.jar进行此活动 我曾尝试使用

导入tiff文件
BaseFont bf = BaseFont.createFont("futura",BaseFont.TIMES_ITALIC, BaseFont.EMBEDDED, true, bytesArray, null);

但是它给出了错误

com.itextpdf.text.DocumentException: Font 'futura' with 'Identity-H' is not recognized.
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:716)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:625)
    at com.itextpdf.text.pdf.BaseFont.createFont(BaseFont.java:568)

这是我用来在PDF中编写的代码。

PdfContentByte cb = writer.getDirectContent();        
File file = new File(p.getProperty("FONTFILE"));
byte[] bytesArray = new byte[(int) file.length()]; 
BaseFont bf = BaseFont.createFont("futura",BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true, bytesArray, null);
cb.saveState();
cb.beginText();
cb.moveText(x, y);
cb.setFontAndSize(bf, size);
cb.showText(text);
cb.endText();
cb.restoreState();

预期结果应为“ PDF应该使用Futura字体创建” 但这引发了异常。

1 个答案:

答案 0 :(得分:0)

BaseFont.createFont使用第一个参数来确定要实例化的字体类型。

  • 如果它是标准的14字体名称或CJK字体名称(我假设是Adobe CJK字体包),则根据其已知特征对其进行初始化,而无需嵌入。
  • 如果以“ .afm”或“ .pfm”结尾,则该字体将初始化为1类字体。
  • 如果以“ .ttf”或“ .otf”结尾或包含“ .ttc”,则该字体将初始化为真型字体。
  • 否则(取决于boolean noThrow参数)将返回null或引发Exception

在手头情况下,应加载真字体。因此,在

BaseFont bf = BaseFont.createFont("futura",BaseFont.IDENTITY_H, BaseFont.EMBEDDED, true, bytesArray, null);

用“ futura.ttf”代替“ futura”。甚至可以像最终那样使用字体文件的完整路径和文件名。