我已成功将rtf String转换为html字符串,这是显示格式和文本的必要步骤。那么到现在为止,我已经使用Markuponverter liberary将这个html转换为pdf - 我在codeproject找到的那个。当我打开pdf文件时,它显示带有格式的英文文本,但是当我尝试转换用阿拉伯语(或乌尔都语作为其子集)编写的文本时,转换为pdf后,pdf文件中没有文本。我估计它可能是一个字体渲染问题,并尝试更改字体,如ARIALUNI.TTF但没有任何反应。到目前为止,我已经尝试了这个,我将写一个我在这里使用的片段,所以任何人都可以指出错误并提出一些提示。
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();
此代码显示包含和不包含formattign的英文文本,但不显示阿拉伯语文本,甚至不显示纯文本。
答案 0 :(得分:0)
问号代替字符意味着wkhtmltopdf
无法找到包含阿拉伯字符的字体。我发现的最简单的解决方案是Base64-encode your font,并将其直接包含在CSS /样式声明中:
@font-face {
font-family: 'Amiri';
src: url(data:font/truetype;charset=utf-8;base64,<BASE64-ENCODED-DATA>
}
编辑:分步说明:
Encode binary file
,然后按Encode
。这将编码文件并生成编码字体。输出看起来像一堆随机字符。<BASE64-ENCODED-DATA>
替换为您从编码中获得的Base64输出。ARIALUNI
字体之前添加它是很重要的。@font-face {
font-family: 'ARIALUNI';
src: url(data:font/truetype;charset=utf-8;base64,AAEAAAATAQA...
}
body, h1 {
font-family: 'ARIALUNI', sans-serif;
}