2013-09-05 8 views
0

Ниже приводится код для написания PDF с использованием Java.Письмо в формате PDF PDF - Шрифт не поддерживается

Код

public class PDFTest {  

    public static void main(String args[]) { 
     Document document = new Document(PageSize.A4, 50, 50, 50, 50);  

     try { 
      File file = new File("C://test//itext-test.pdf"); 
      FileOutputStream fileout = new FileOutputStream(file);    
      PdfWriter.getInstance(document, fileout); 
      document.addAuthor("Me"); 
      document.addTitle("My iText Test"); 
      document.open(); 
      Chunk chunk = new Chunk("iText Test"); 
      Paragraph paragraph = new Paragraph(); 
      String test = "și"; 
      String test1 = "şi"; 
      if (test.equalsIgnoreCase(test1)) { 
       // System.out.println("equal ignore case true"); 
       paragraph.add(test + " New Font equal with Old Font"); 
      } else { 
       // System.out.println("equal ignore case X true"); 
       paragraph.add(test1 + " New Font Not equal with Old Font"); 
      } 
      paragraph.setAlignment(Element.ALIGN_CENTER); 
      document.add(paragraph);   
      document.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Когда я проверяю с румынским языком, я обнаружил, что "ș" отсутствует в созданном PDF. Документ выглядит следующим образом: Error

Любые рекомендации или ссылки по этому вопросу высоко оценены.

**EDITED**
Я использую пример юникода, как показано ниже, и выход все тот же. "ș" по-прежнему отсутствует.

Code

static String RESULT = "C://test/itext-unicode4.pdf"; 
    static String FONT = "C://Users//PenangIT//Desktop//Arial Unicode.ttf"; 
    public static void main(String args[]) 
    { 
     try 
     { 
      Document doc = new Document(); 
      PdfWriter.getInstance(doc, new FileOutputStream(RESULT)); 
      doc.open(); 
      BaseFont bf; 
      bf = BaseFont.createFont(FONT,BaseFont.IDENTITY_H,BaseFont.EMBEDDED); 
      doc.add(new Paragraph("Font : "+bf.getPostscriptFontName()+" with encoding: "+bf.getEncoding())); 
      doc.add(new Paragraph(" TESTING ")); 
      doc.add(new Paragraph(" TESTING 1 și ")); 
      doc.add(new Paragraph(" TESTING 2 şi ")); 
      doc.add(Chunk.NEWLINE); 
      doc.close(); 

     } 
     catch(Exception ex) 
     {    
     } 

Выход выглядит следующим образом
enter image description here
Этом же для кодирования, а также. "ș" по-прежнему отсутствует.

+0

Что вы хотите. Я не получаю. –

+0

@RahulKulhari некоторый шрифт отсутствует при записи файла в формате PDF. PDF-файл получил только ** 'i' ** вместо **' şi' **. –

+0

Вы не выбрали ни одного шрифта. Таким образом, используется шрифт по умолчанию, который, безусловно, является одним из стандартных 14 шрифтов, каждый просмотрщик PDF должен поддерживать без дальнейших церемоний. К сожалению, им нужно только поддерживать его для ограниченного набора символов, и, скорее всего, ваш специальный символ не находится в этом наборе символов. Поэтому вы должны пойти и явно использовать шрифт, который поддерживает ваш персонаж и вставлять его в PDF. – mkl

ответ

1

Пожалуйста, обратите внимание на этот PDF: encoding_example.pdf (*)

Он содержит все виды символов, которые не присутствуют в шрифте Helvetica по умолчанию (который является шрифт по умолчанию вы используете, как вы не определяя какой-либо другой шрифт).

В источнике EncodingExample мы используем arialbd.ttf с определенной кодировкой, в результате чего в PDF-формате используется простой шрифт. В источнике UnicodeExample мы используем IDENTITY_H в качестве кодировки, что приводит к использованию композитного шрифта в PDF.

Я адаптировать свой код, потому что я вижу, что вы не поняли мой ответ:

BaseFont bf = BaseFont.createFont(FONT,BaseFont.IDENTITY_H,BaseFont.EMBEDDED); 
doc.add(new Paragraph(" TESTING 1 și ", new Font(bf, 12))); 
doc.add(new Paragraph(" TESTING 2 \u015Fi ", new Font(bf, 12))); 

Вы видите разницу? В вашем коде вы создаете bf, но вы не используете этот объект в любом месте.

(*) Примечание: pdf.js не может интерпретировать некоторые глифы, потому что pdf.js не поддерживает простые шрифты со специальной кодировкой; эти glypgh отображаются правильно в Adobe Reader и в Chrome PDF viewer. Если вы хотите быть в безопасности, используйте композитные шрифты, потому что pdf.js может корректно отображать эти глифы: unicode_example.pdf

+0

Я тестировал в обоих направлениях, и результат все тот же. ** '' ş "' ** все еще отсутствует. Я отредактировал свой вопрос с вашим примером. –

+0

Вы уверены, что глиф доступен в arial? Конечно, вы не поместили «ş» в свой код, вы заменили его на «\ u015F», не так ли? Если использование arial не работает, вы пытались использовать arialuni.ttf? ** ОБНОВЛЕНИЕ: ** Я видел ваш код. Я вижу, что вы все еще используете Helvetica вместо Arial! –

+0

Спасибо за указание. Он работает сейчас. Благодарю. –

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

  • Нет связанных вопросов^_^