iTextSharp LGPLv2.Core не отображает арабский c в rtl при преобразовании из html в pdf - PullRequest
0 голосов
/ 16 июня 2020

Я использую iTextSharp LGPLv2.Core для преобразования html в pdf с содержанием арабского c.

При преобразовании в pdf арабский c текст отображается LTR вместо RTL и разделены символы, как показано ниже

enter image description here

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;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...