По-моему, что else
оператор предлагает, то, что предыдущие разработчики не знали свой C#. Конструктор всегда возвращает созданный объект или выдает исключение.
В очень прежние времена, конструкторы C++ могли возвратиться null
, поэтому возможно, проблема возникает из этого. Это больше не верно в C++ также, по крайней мере, для значения по умолчанию new
оператор.
Наконец, я думаю, что нашел решение, я немного изменил исходный код itextsharp, чтобы отображать турецкие символы. (Турецкий код символа - cp1254)
Я добавляю "
public const string CP1254 = "Cp1254";
"в [BaseFont.cs] в исходном коде.После этого я модифицирую [FactoryProperties.cs]. Я изменил так:
public Font GetFont(ChainedProperties props)
{
I don't write the whole code.I changed only code below;
------------Default itextsharp code------------------------------------------------------
if (encoding == null)
encoding = BaseFont.WINANSI;
return fontImp.GetFont(face, encoding, true, size, style, color);
-------------modified code--------------------------------------------
encoding = BaseFont.CP1254;
return fontImp.GetFont("C:\\WINDOWS\\Fonts\\arial.ttf", encoding, true, size, style, color);
}
. После того, как я скомпилировал новую dll , показаны отсутствующие символы.
Я не знаком с библиотекой iTextSharp; однако, похоже, вы конвертируете вывод компонента gridview в строку и считываете из этой строки для создания документа PDF. У вас также происходит странное преобразование из UTF-8 в UTF-8.
Из того, что я вижу (учитывая, что ваш GridView выводит символы правильно), если вы выводите символы в строку, они будут представлены как UTF -16 в памяти. Вероятно, вам потребуется передать эту строку непосредственно в библиотеку PDF (например, как вы передаете необработанную строку .NET UTF-16 «İııŞŞşşĞĞğğ»
как есть).
Для турецкой кодировки
CultureInfo ci = new CultureInfo("tr-TR");
Encoding enc = Encoding.GetEncoding(ci.TextInfo.ANSICodePage);
Если вы выводите HTML, попробуйте разные теги DOCTYPE в верхней части страницы.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
Обратите внимание, что при использовании HTML вам может потребоваться HTMLEncode символов.
Нет необходимости изменять исходный код.
Попробуйте следующее:
iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica","Cp1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);