Я пытаюсь проанализировать строку 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;}
}
(поток сохраняется в базе данных и открывается как файл, хотя я попытался сохранить на диск и получил тот же результат.)