2010-01-07 3 views
1

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

После не работает:

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

То есть, это вернет ложь:

font.getBaseFont().isEmbedded() 

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

ответ

2

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

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

3

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

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

1

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

+1

Моя проблема заключалась в том, что мне нужно, чтобы вставить * все * шрифты, используемые в PDF файле, в том числе 8 для предотвращения каких-либо различий в рендеринге. –

+3

Вложение всех шрифтов, включая стандартные PDF-шрифты, требуется для соответствия PDF/A. – rwong

1

Эта программа поможет вам добавить весь стиль шрифта, который имеет 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()); 
    } 
} 

}

+0

Это не тот вопрос. – mkl

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