2015-09-16 3 views
1

Я создаю документы PDF с помощью iText. Когда я пытаюсь включить шрифт «Agenda Tabular Light», iText игнорирует мой выбор шрифта. Я подтвердил, что шрифт не установлен с помощью Adobe Reader's Файл> Свойства> Шрифты. PDF показывает, что Helvetica использовался, но я не выбрал Helvetica. Цвета видны, но не шрифт.Почему мой шрифт не применяется при создании PDF-документа?

Мой код выглядит следующим образом:

public static final Font FONT_HEADER = FontFactory.getFont(AGENDA_TABULAR_LIGHT, 18, Font.NORMAL, TITLE_COLOR); 

Я даже я попробовал пример программы.

// step 1 
    Document document = new Document(); 
    // step 2 
    PdfWriter.getInstance(document, new FileOutputStream(filename)); 
    // step 3 
    document.open(); 
    // step 4: 
    Font font = FontFactory.getFont("Agenda Tabular Light"); 

    System.out.println(font.toString()); 

    document.add(new Phrase("Agenda Tabular Light J j", font)); 
    Font fontbold = FontFactory.getFont("Times-Roman", 12, Font.BOLD); 
    document.add(new Phrase("Times-Roman, Bold", fontbold)); 
    document.add(Chunk.NEWLINE); 

    document.close(); 

Он отображается как Times-Roman и использует другой шрифт для повестки дня. Но всякий раз, когда я вижу вкладку шрифтов свойств Adobe Reader, он отображает Helvetica.

+0

Это трудно поверить, что ваш бизнес будет необходимо использовать устаревшую, неподдерживаемые версии IText (начиная с июля 2009 года). Обновите версию до последней версии, чтобы избежать юридических и технических проблем, существующих в iText 2.1.7, и мы еще раз рассмотрим ваш вопрос. –

+0

Это в производстве и модернизации его до последней версии не то, что я решаю. Но мне нужно устанавливать шрифты, все настраивается, как размер, цвет, но не особенно шрифт. Есть ли решение, которое вы можете предоставить? – mabimal

+0

Да, как ясно указывает документация, вы не можете использовать псевдонимы шрифтов, такие как '' Повествование табличного света '', если вы сначала не регистрируете шрифт с этим псевдонимом. Кто решает об обновлении? Пожалуйста, сообщите нам, чтобы мы могли избежать того, что клиенты могут использовать проблемную версию iText. –

ответ

1

Как поясняется в комментариях, это, как правило, не работает:

Font font = FontFactory.getFont("garamond bold"); 

По умолчанию только стандартных типа 1 шрифтов известны в FontFactory и "garamond bold" не один из этих шрифтов, следовательно, Вместо этого Helvetica будет использоваться (Helvetica - шрифт по умолчанию в iText).

Вы можете «обучить» FontFactory, где найти другие шрифты, зарегистрировав их.

Вы можете попробовать:

FontFactory.registerDirectories(); 

Но это очень дорогая операция, как вы спросите IText искать операционную систему для файлов шрифтов в различных каталогах шрифтов (например, C:/Windows/Fonts). Это может занять несколько секунд, и вы получите гораздо больше шрифтов, чем вам нужно (и, возможно, нужный шрифт не будет зарегистрирован в любом случае).

Лучший способ для регистрации шрифтов нужно так:

FontFactory.register("c:/windows/fonts/garabd.ttf", "garamond bold"); 

Мы говорим IText, где найти файл TTF ("c:/windows/fonts/garabd.ttf") и определим псевдоним для этого шрифта ("garamond bold"). Теперь, когда имя шрифта, зарегистрированный, мы можем начать использовать его:

Font myBoldFont = FontFactory.getFont("garamond bold"); 
+0

Спасибо, Это сработало, и я получил его и от свойств PDF. – mabimal

Смежные вопросы