Я успешно преобразовал строку rtf String в строку html, которая была необходима для отображения форматирования вместе с текстом. Хорошо, теперь я преобразовал этот html в pdf, используя Markuponverter libary - тот, который я нашел в codeproject. Когда я открываю pdf-файл, он отображает текст на английском с форматированием, но когда я пытаюсь преобразовать текст, написанный на арабском языке (или урду, являющийся его подмножеством), текст не сохраняется в pdf-файле после преобразования в pdf. Я считал, что это может быть проблема с отображением шрифтов, и попробовал изменить шрифты, такие как ARIALUNI.TTF, но ничего не произошло. Пока я пробовал это, и я собираюсь написать фрагмент, который я использую здесь, чтобы каждый мог указать на ошибки и предложить несколько советов.Арабский Текст не отображается при преобразовании из html в pdf с помощью iText #
RichTextBox rtbnew = new RichTextBox();
rtbnew.Rtf = this.rtb.Rtf;
String abc = this.markupConverter.ConvertRtfToHtml(rtbnew.Rtf);
MessageBox.Show(abc);
//rtbnew.Text = this.rtb.Text;
//string str = rtbnew.Text;
//TextReader tr = new StringReader(str);
Document doc = new Document();
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(@path + "/Doc2.pdf", FileMode.Create));
//////////////////
doc.Open();
//Sample HTML
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>
<!DOCTYPE html
PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN""
""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""en"" lang=""en"">
<head>
<title>Minimal XHTML 1.0 Document with W3C DTD</title>
</head>
<body>
" + abc + " </body></html>");
//Path to our font
string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
//Register the font with iTextSharp
iTextSharp.text.FontFactory.Register(arialuniTff);
//Create a new stylesheet
iTextSharp.text.html.simpleparser.StyleSheet ST = new iTextSharp.text.html.simpleparser.StyleSheet();
//Set the default body font to our registered font's internal name
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
//Set the default encoding to support Unicode characters
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H);
//Parse our HTML using the stylesheet created above
List<IElement> list = HTMLWorker.ParseToList(new StringReader(stringBuilder.ToString()), ST);
//Loop through each element, don't bother wrapping in P tags
foreach (var element in list)
{
MessageBox.Show(element.ToString());
doc.Add(element);
}
doc.Close();
Этот код содержит текст на английском языке с форматом и без него, но не показывает арабский текст, даже не обычный текст.
Используя довольно много ваш точный код и только заменив RTF часть с строкового литерала я был в состоянии получить PDF который выводит арабский текст. 'string abc =" میں اردو نہیں بولتے ";' Однако он выглядит обратным, когда отображается. Он работает для вас без части RTF? –
Крис я пробовал 3 метода и ничего не придумал. Сначала я сделал: rtbnew.Text = this.rtb.Text; String abc = this.markupConverter.ConvertRtfToHtml (rtbnew.Rtf); и это снова дает мне текст, кроме вопросительных знаков, как ???? и второй, который я попробовал, был: rtbnew.Text = this.rtb.Text; String abc = this.markupConverter.ConvertRtfToHtml (rtbnew.Text); и это не дает ничего, кроме пустой страницы. –
Теперь в третьем случае, когда я попробовал вашу простую замену простой строкой фразы Urdu, назначенной String abc, он дал мне текст Urdu в pdf-файле, но слова были разбиты на литералы, как на میں, это было م ے ن. Я не знаю, что, вероятно, я должен делать? Пожалуйста, помогите мне. –