【发布时间】:2019-07-25 19:11:50
【问题描述】:
我正在尝试使用 iTEXTsharp 和 xmlworker 5.5.13 在 MVC 应用程序中解析包含希伯来语到 pdf 的 HTML 字符串。我无法让希伯来语出现在页面上。我试图模仿这个post,但我所做的似乎无济于事。我已将 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>
公共 MemoryStream 合并pdfs(字符串 myserverpath, ControllerContext mycc,字符串 Viewname,对象模型) { 文档 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;}
}
(流被保存到数据库并作为文件打开,尽管我尝试保存到磁盘并得到相同的结果。)
【问题讨论】:
-
您的 ttf 文件是否类似于:“resources/fonts/NotoSansHebrew-Regular.ttf” 从这里尝试 TTF:github.com/jenskutilek/free-fonts/tree/master/Open/…
-
如果我使用“resources/fonts/....ttf”我会得到一个错误。我必须使用 windows 字体目录。我尝试了 NotoSansHebrew,它给出了相同的结果。
标签: c# pdf itext hebrew xmlworker