我尝试使用iTextSharp LGPL / MPL(4.1.6)在内存中创建一个从左到右,希伯来语PDF并将其返回给客户端。我有这个问题:
该文本确实是希伯来语,但不是向右,文本是相反的。
代码:
public MemoryStream ExportGrowthPlan()
{
var doc = new Document(PageSize.A4);
var ms = new MemoryStream();
//Bind PDF writer to document and stream
PdfWriter.GetInstance(doc, ms);
//Open document for writing
doc.Open();
//Add a page
doc.NewPage();
//Path to the Arial file
var ARIALUNI_TFF = @"Export\Fonts\ARIAL.TTF";
//Create a base font object making sure to specify IDENTITY-H
var bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//Create a specific font object
var f = new Font(bf, 12);
//Use a table so that we can set the text direction
var T = new PdfPTable(1);
//Hide the table border
T.DefaultCell.BorderWidth = 0;
//Set RTL mode
T.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
//Add our text
T.AddCell(new Phrase("מה קורה", f));
//T.AddCell(new Phrase("What's up?", f));
//Add table to document
doc.Add(T);
//Close the PDF
doc.Close();
var newStream = base.CloneStream(ms);
return newStream;
}
protected MemoryStream CloneStream(MemoryStream memoryStream)
{
var ms = new MemoryStream(memoryStream.ToArray());
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
此代码取自另一个SO问题here
控制器然后调用此行以将MemoryStream返回到AngularJS返回IActionResult:
return File(ms, "application/pdf", "somefile.pdf");
正如您所看到的,字母是相反的,方向是ltr,而不是rtl。 我曾尝试使用FileStream而不是MemoryStream,但结果是一样的 - 没有rtl和虔诚的文本。 我已经用控制台应用程序尝试了这个代码,它运行得很好。出于某种原因,使用我的项目(ASP.NET Core,只有返回数据的控制器,而不是视图),我得到了这种行为。
有什么建议吗?
答案 0 :(得分:0)
好的,现在这真的很奇怪......我已经将iTextSharp.dll替换为版本4.1.2并且它可以工作。我并不是说我们会继续使用这个版本,但至少看起来它可能与版本4.1.6特别相关。
HTH