2013-08-14 16 views
0

Мой PDF-код не отображается правильно с Adobe Reader. Это хорошо с другими читателями PDF, поэтому это должно быть проблемой синтаксиса, поскольку я слышал, что Adobe Reader более строг с синтаксисом PDF. Шрифты, по-видимому, в два раза больше, чем должны быть, но горизонтальное расстояние правильное, это заставляет шрифты пересекаться друг с другом.iTextSharp встроенный кириллический шрифт в Adobe Reader

Это мой код C# (код создания шрифта находится в конце этого сообщения).

Font officialUseFont = EmbeddedResources.CreateDesignFont(webform); 
PdfContentByte officialUseCanvas = _stamper.GetOverContent(3); 
ColumnText.ShowTextAligned(officialUseCanvas, Element.ALIGN_CENTER, new Phrase(webform.Text, officialUseFont), posX, posY, 0); 

Я использую iTextSharp 5.4.2.0 со временем выполнения v2.0.50727. PDF Font Properties

Я, должно быть, вложил некоторые шрифты, потому что кириллица и китайские алфавиты раньше не работали, но теперь они работают. Поля формы, которые существуют в PDF, заполнены кириллическими символами без каких-либо проблем, это только проблема с холстом. enter image description here

public Font CreateDesignFont(IForm webform) 
{ 
    var baseFont = GetBaseFont(fontNamespace.Length, selectedFontName); 
    return new Font(baseFont, webform.FontSize); 
} 
    private static BaseFont GetBaseFont(int fontNamespaceLength, string selectedFontName) 
    { 

     byte[] fontBuffer; 
     using (var stream = (Assembly.GetExecutingAssembly().GetManifestResourceStream(selectedFontName))) 
     { 
      fontBuffer = new byte[stream.Length]; 
      stream.Read(fontBuffer, 0, fontBuffer.Length); 
     } 
     var fontfile = selectedFontName.Substring(fontNamespaceLength); 
     var customFont = BaseFont.CreateFont(fontfile, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, BaseFont.CACHED, fontBuffer, null); 
     return customFont; 
    } 
+0

Извините, я только что допустил ошибку в исходном сообщении. Я использую версию 5.4.2.0 – fireydude

+0

Просьба представить PDF для проверки. – mkl

+0

У вас есть достаточно информации в сообщении сейчас? Я мог бы поместить PDF в папку Dropbox, если вам это нужно. – fireydude

ответ

0

Недостающий фрагмент кода, который вы предоставляете. Проблема возникает в том, что происходит, когда вы делаете EmbeddedResources.CreateDesignFont(webform);

Если шрифт не отображается в Adobe Reader, вы не вставляете шрифт. Может быть, вы думаете, что делаете, но, судя по поведению читателей в формате PDF, вы этого не сделали.

Можете ли вы предоставить снимок экрана свойств документа, а точнее вкладку «Шрифты»?

UPDATE

Я пытался писать свой собственный фрагмент кода, и я не был в состоянии воспроизвести проблему. Поэтому я снова посмотрел на ваш код, и я увидел, что вы кешируете шрифт, но вы уже использовали ArialMT, используя кодировку WINANSI, чтобы заполнить поля на странице 1. IMO (у меня нет времени на check), что несовместимо с использованием того же шрифта из кеша, используя IDENTITY_H. Если вы не кешируете шрифт (почему бы вам? Вы передаете fontBuffer! Нет необходимости хранить шрифт в кеше, если вы уже кэшируете сами байты шрифтов), ваша проблема, вероятно, будет решена.

+0

Я использую Times New Roman с кодировкой IDENTITY_H. Сообщение было обновлено с дополнительной информацией. – fireydude

+0

Я сделал шаг за исходным кодом iTextSharp для этого, но все еще не могу найти проблему. Встроенный флаг установлен так, чтобы он был встроен. – fireydude

+0

Я обновил ответ. –

0

Проблема возникла из-за того, что я использовал шрифты .otf. Когда я изменился на .ttf, проблема исчезла.

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