создать PDF с шрифтом FUTURA в Java - PullRequest
0 голосов
/ 03 октября 2019

Здесь я создаю pdf со шрифтом FUTURA, но мой метод BaseFont.createFont выдает ошибку. В настоящее время PDF создается успешно с использованием шрифта Halvetica, но я хочу, чтобы он создавался с использованием шрифта FUTURA.

Здесь я использую 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 голосов
/ 04 октября 2019

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" на "futura.ttf". Или даже, как вы в конечном итоге, использовали полный путь и имя файла шрифта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...