Как встроить шрифт Helvetica в PDF с помощью iText? - PullRequest
1 голос
/ 07 января 2010

Как встроить шрифт Helvetica в PDF с помощью iText?

Следующее не работает:

BaseFont helvetica = BaseFont.createFont(BaseFont.HELVETICA,
        BaseFont.CP1252, BaseFont.EMBEDDED);
Font font = new Font(helvetica, 20, Font.BOLD);

То есть это вернет false:

font.getBaseFont().isEmbedded()

Встраивание работает, если я сам предоставляю файл TrueType в качестве параметра для метода createFont ().

Ответы [ 4 ]

3 голосов
/ 07 января 2010

Я немного покопался в исходном коде, и кажется, что iText явно игнорирует флаг BaseFont.EMBEDDED для определенных шрифтов, и Helvetica является одним из них.

Встраивание, вероятно, работает, если вы предоставите файл шрифта (например, TrueType .ttf) для Helvetica.

2 голосов
/ 24 мая 2011

Да, встраивание определенных шрифтов не будет работать.
Это не может работать.
iText, для встраивания шрифта, должен иметь доступ к ресурсу шрифта. Определенные шрифты предоставляются программой чтения PDF и поэтому недоступны вашей библиотеке во время процесса создания PDF.

Более того, каждый читатель PDF должен предоставить эти шрифты, но иметь свободу выбора метода лицензирования для этих шрифтов. Их лицензия может запрещать любое использование для конечного использования, кроме отображения файлов PDF в этом считывателе.

1 голос
/ 22 марта 2016

Эта программа поможет вам добавить весь стиль шрифта, который имеет itext.

public class FontStyle{
public static void main(String[] args) {

    // creation of the document with a certain size and certain margins
    // may want to use PageSize.LETTER instead
    Document document = new Document(PageSize.A4, 50, 50, 50, 50);
    try {
        // creation of the different writers
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream("SupportedFontsStyle.pdf"));

        final Chunk NEWLINE = new ChunkPF("\n");
        document.open();
        Phrase phrase = new Phrase();

        LineSeparator lineSeperator = new LineSeparator();
        final Font font_h1_normal = FontFactory.getFont("Courier",8F, Font.NORMAL);
        phrase.add(new Chunk("Courier", font_h1_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h2_normal = FontFactory.getFont("Courier-Bold", 8F,Font.BOLD);
        phrase.add(new Chunk("Courier-Bold  ", font_h2_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h3_normal = FontFactory.getFont("Courier-Oblique",8F, Font.NORMAL);
        phrase.add(new Chunk("Courier-Oblique  ", font_h3_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h4_normal = FontFactory.getFont("Courier-BoldOblique", 8F,Font.BOLD);
        phrase.add(new Chunk("Courier-BoldOblique", font_h4_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h5_normal = FontFactory.getFont("Helvetica",8F, Font.NORMAL);
        phrase.add(new Chunk("Helvetica  ", font_h5_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h6_normal = FontFactory.getFont("Helvetica-Bold", 8F,Font.BOLD);
        phrase.add(new Chunk("Helvetica-Bold  ", font_h6_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h7_normal = FontFactory.getFont("Helvetica-BoldOblique",8F, Font.BOLD);
        phrase.add(new Chunk("Helvetica-BoldOblique", font_h7_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h8_normal = FontFactory.getFont("Symbol", 8F,Font.NORMAL);
        phrase.add(new Chunk("Symbol", font_h8_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h9_normal = FontFactory.getFont("Times-Bold",8F, Font.BOLD);
        phrase.add(new Chunk("Times-Bold  ", font_h9_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h10_normal = FontFactory.getFont("Times", 8F,Font.NORMAL);
        phrase.add(new Chunk("Times  ", font_h10_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h12_normal = FontFactory.getFont("Times-BoldItalic", 8F,Font.BOLDITALIC);
        phrase.add(new Chunk("Times-BoldItalic  ", font_h12_normal));
        phrase.add(ChunkPF.NEWLINE);            
        final Font font_h13_normal = FontFactory.getFont("Times-Italic",8F, Font.ITALIC);
        phrase.add(new Chunk("Times-Italic  ", font_h13_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h14_normal = FontFactory.getFont("Times-Roman", 8F,Font.NORMAL);
        phrase.add(new Chunk("Times-Roman ", font_h14_normal));
        phrase.add(ChunkPF.NEWLINE);
        final Font font_h15_normal = FontFactory.getFont("ZapfDingbats",8F, Font.NORMAL);
        phrase.add(new Chunk("ZapfDingbats  ", font_h15_normal));
        phrase.add(ChunkPF.NEWLINE);        

        document.add(phrase);

        document.close();

    } catch (Exception ex) {
        System.err.println(ex.getMessage());
    }
}

}

1 голос
/ 11 января 2010

Спецификация PDF определяет 8 шрифтов, которые, как ожидается, будут доступны в средстве просмотра PDF, поэтому их не нужно будет встраивать. Helvetica является одним из них.

...