HTML к PDF некоторые символы отсутствует (itextsharp)

По-моему, что else оператор предлагает, то, что предыдущие разработчики не знали свой C#. Конструктор всегда возвращает созданный объект или выдает исключение.

В очень прежние времена, конструкторы C++ могли возвратиться null, поэтому возможно, проблема возникает из этого. Это больше не верно в C++ также, по крайней мере, для значения по умолчанию new оператор.

9
задан Lipis 14 June 2014 в 12:27
поделиться

4 ответа

Наконец, я думаю, что нашел решение, я немного изменил исходный код 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 , показаны отсутствующие символы.

7
ответ дан 4 December 2019 в 10:05
поделиться

Я не знаком с библиотекой iTextSharp; однако, похоже, вы конвертируете вывод компонента gridview в строку и считываете из этой строки для создания документа PDF. У вас также происходит странное преобразование из UTF-8 в UTF-8.

Из того, что я вижу (учитывая, что ваш GridView выводит символы правильно), если вы выводите символы в строку, они будут представлены как UTF -16 в памяти. Вероятно, вам потребуется передать эту строку непосредственно в библиотеку PDF (например, как вы передаете необработанную строку .NET UTF-16 «İııŞŞşşĞĞğğ» как есть).

2
ответ дан 4 December 2019 в 10:05
поделиться

Для турецкой кодировки

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 символов.

Server.HTMLEncode ()

HttpServerUtility.HtmlEncode ()

1
ответ дан 4 December 2019 в 10:05
поделиться

Нет необходимости изменять исходный код.

Попробуйте следующее:

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);
6
ответ дан 4 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: