Я использую iTextSharp LGPLv2.Core для преобразования html в pdf с содержанием арабского c.
При преобразовании в pdf арабский c текст отображается LTR вместо RTL и разделены символы, как показано ниже
I'v зарегистрировано три типа шрифтов, ни один из них не работал:
Tahoma: с отображением LTR и разделенными.
Arabtype: с отображением LTR и с разделением.
arialuni: вообще не отображаются символы арабского c.
Вот фрагмент кода того, что я сделал:
try
{
var paymentReceipt = await _appointmentAppService.GetPaymentReceiptAsync(checkOutId);
string invoiceHtml = RenderView("PaymentReceipt", paymentReceipt);
using (MemoryStream stream = new System.IO.MemoryStream())
{
var styleSheet = new StyleSheet();
styleSheet.LoadTagStyle(HtmlTags.BODY, "encoding", "Identity-H");
styleSheet.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "arabic");
string webRootPath = _webHostEnvironment.WebRootPath;
string fontPath = Path.Combine(webRootPath, "fonts", "ARABTYPE.TTF");
FontFactory.Register(fontPath, "arabic");
//FontFactory.Register(TestUtils.GetTahomaFontPath());
//FontFactory.Register(TestUtils.GetArialUnicodeMSFontPath());
var unicodeFontProvider = FontFactoryImp.Instance;
unicodeFontProvider.DefaultEmbedding = BaseFont.EMBEDDED;
unicodeFontProvider.DefaultEncoding = BaseFont.IDENTITY_H;
var props = new Hashtable
{
{ "font_factory", unicodeFontProvider }
};
var document = new Document();
var pdfWriter = PdfWriter.GetInstance(document, stream);
document.AddAuthor(TestUtils.Author);
document.Open();
var objects = HtmlWorker.ParseToList(
new StringReader(invoiceHtml),
styleSheet,
props
);
foreach (IElement element in objects)
{
document.Add(element);
}
document.Close();
return File(stream.ToArray(), "application/pdf");
}
}
catch (Exception ex)
{
throw;
}