Невозможно проанализировать HTML-файл на иврите в pdf с помощью itextsharp - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь проанализировать строку HTML, которая содержит иврит в pdf, в приложении MVC, используя iTEXTsharp и xmlworker 5.5.13.Я не могу найти иврит на странице.Я пытался смоделировать после этого сообщения , но ничего, что я делаю, похоже, не помогает.Я упростил HTML до следующего:

<!DOCTYPE html>
   <html dir="rtl">
   <head>
    <meta charset="utf-8" /> 
   </head>
   <body>
   <div dir="rtl" style="font-family: David"></div>
    <div class="container body-content">
     <div> שלום עולם  </div>
    <div>hello world</div>
    </div>   
   </body>
   </html>
в файле PDF отображается только «hello world».Вот мой код для PDF.Ниже мой код для создания PDF.Я пробовал разные шрифты, включая Arial, NotoSansHebrew, но результат тот же.Удаление cssfile также не решает проблему.
public MemoryStream mergepdfs (строка myserverpath, ControllerContext mycc, строка Viewname, Object model) {Document mydoc = new Document ();MemoryStream mystream = new System.IO.MemoryStream ();
       PdfWriter writer = PdfWriter.GetInstance(mydoc, mystream);
        writer.CloseStream = false;
        mydoc.Open();
        PdfReader reader;
        PdfContentByte cb = writer.DirectContent;
        PdfImportedPage Pdfim;
        string myxhtml;
        myxhtml = (function that generates HTML shown above);
        this.createpagefromxhtml(mydoc, writer, myxhtml, true);

        mydoc.Close();

        return mystream;
    }
    public bool createpagefromxhtml(Document mydoc, PdfWriter mywriter, string myxhtml, bool isnewpage)
    {
        StringReader sr = new System.IO.StringReader(myxhtml);
        try
        {
            using (mydoc)
            {
                if (isnewpage)
                { mydoc.NewPage();}

                FontFactory.RegisterDirectories();

                // Set factories
                ICSSResolver cssResolver = new StyleAttrCSSResolver();
                XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
                fontProvider.Register("C:\\Windows\\Fonts\\David.ttf");
                CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);

                var htmlContext = new HtmlPipelineContext(null);
                htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory());

                // Set css
               cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("~/Content/Site.css"), true);
                cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("~/Content/bootstrap.min.css"), true);
                cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("~/Content/bootstrap-rtl.min.css"), true);

                // Export
                IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(mydoc, mywriter)));
                var worker = new XMLWorker(pipeline, true);
                var xmlParse = new XMLParser(true, worker);
                xmlParse.Parse(sr);
                xmlParse.Flush();
                return true;
            }
        }
        catch (Exception ex)
        {  return false;}
    }

(поток сохраняется в базе данных и открывается как файл, хотя я попытался сохранить на диск и получил тот же результат.)

1 Ответ

0 голосов
/ 04 марта 2019

Я наконец получил его на работу.Я должен был обернуть мой HTML в div

<div dir="rtl" style="font-family:  David"> .... text... </div>
Полагаю, ключ определял семейство шрифтов страницы так же, как и шрифт в методе fontfamily.register.
...