2013-08-26 2 views
0

Я не могу найти причину, почему мой веб-сайт MVC 3 правильно показывает арабский шрифт, а мой PDF - нет.Арабский шрифт в Web UI и itextsharp

Я использую шрифт блаженства на своем веб-сайте;

@font-face { 
font-family: 'blissregular'; 
src: url('/Fonts/blissregular-webfont.eot'); 
src: url('/Fonts/blissregular-webfont.eot?#iefix') format('embedded-opentype'), 
    url('/Fonts/blissregular-webfont.ttf') format('truetype'); 
font-weight: normal; 
font-style: normal;} 

Все работает отлично. После этого я хочу создать pdf-выход, но арабские шрифты не отображаются.

Я искал googled и понимал, что шрифт должен иметь арабский символ, чтобы он отображался правильно. Я изменился на ариальный шрифт (который содержит арабский характер) и ... pdf работал.

Итак ... Как возможно, что с блаженским шрифтом (у которого нет арабских символов) Я вижу арабский шрифт на веб-сайте?

Я действительно путают ....

Большое спасибо всем!

+0

Итак, у Bliss нет арабских символов, но ваш сайт покажет их еще? И ваш PDF не показывает их вообще? –

+0

Точно. Простите за мой английский, если не было ясно. –

+0

Я столкнулся с этой проблемой раньше, вы можете взглянуть на мой вопрос «Конвертировать арабский» unicode «content html или xml в pdf с помощью itextsharp», который может помочь вам http://stackoverflow.com/questions/16080741/convert-arabicunicode -поперечник-HTML или XML-к PDF-использования-itextsharp –

ответ

0

Для каждого символа, с которым сталкивается ваш браузер, он ищет соответствующий глиф в текущем шрифте. Если шрифт не имеет этого глифа, он ищет любые резервные шрифты, чтобы увидеть, есть ли у них этот глиф. В конечном счете, у каждого браузера есть основной набор стандартных шрифтов, которые являются окончательным резервом. Когда вы указываете шрифт Bliss, но используете арабские символы, вы, вероятно, просто видите резервные шрифты вашего браузера.

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

Проще всего просто добавить шрифт в CSS, который поддерживает эти символы.

.myclass{font-family: blissregular, Arial} 

Если это не сработает, возможно, вам придется вводить шрифты вручную. (На самом деле, я не на 100% уверен в поддержке iText @ font-face.) IText имеет вспомогательный класс, который может подсказать вам, что Bruno talks about it here, но, к сожалению, ссылка C# больше не работает. Это очень просто, просто создайте экземпляр класса FontSelector, позвоните по номеру AddFont в том порядке, в котором вы хотите, чтобы символы были просмотрены, а затем передайте строку в метод Process(), который возвращает обратно Phrase, который вы можете добавить. Ниже приведен базовый пример кода, который показывает это. Я извиняюсь за свой образец текста, я англичанин, поэтому я просто искал что-то для использования, я надеюсь, что я не исказил его или не отбросил назад.

Вам нужно будет перепрыгнуть через несколько дополнительных обручей при обработке HTML-кода, но, надеюсь, вы сможете с ним справиться.

//Sample string. I apologize, this is from a Google search so I hope it isn't backward 
var testString = "يوم الاثنين \"monday\" in Arabic"; 
var outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Test.pdf"); 

//Standard PDF setup 
using (var fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) { 
    using (var doc = new Document()) { 
     using (var writer = PdfWriter.GetInstance(doc, fs)) { 
      doc.Open(); 

      //This is a font that I know *does not* support Arabic characters, substitute with your own font if you don't have it 
      var gishaFontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "gisha.ttf"); 
      var gishaBaseFont = BaseFont.CreateFont(gishaFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
      var gishaFont = new iTextSharp.text.Font(gishaBaseFont, 20); 

      //Add our test string using just a normal font, this *will not* display the Arabic characters 
      doc.Add(new Phrase(testString, gishaFont)); 

      //This is a font that I know *does* support Arabic characters 
      var arialFontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF"); 
      var arialBaseFont = BaseFont.CreateFont(arialFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
      var arialFont = new iTextSharp.text.Font(arialBaseFont, 20); 

      //Create our font selector specifying our most specific font first 
      var Sel = new FontSelector(); 
      Sel.AddFont(gishaFont); 
      Sel.AddFont(arialFont); 

      //Have the font selector process our text into a series of chunks wrapped in a phrase 
      var newPhrase = Sel.Process(testString); 

      //Add the phrase, this will display both characters 
      doc.Add(newPhrase); 

      //Clean up 
      doc.Close(); 
     } 
    } 
} 
Смежные вопросы