使用iTextSharp和ASP.NET Core创建RTL希伯来语pdf

时间:2017-01-18 14:38:57

标签: c# angularjs asp.net-core itext

我尝试使用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");

这是pdf输出: enter image description here

正如您所看到的,字母是相反的,方向是ltr,而不是rtl。 我曾尝试使用FileStream而不是MemoryStream,但结果是一样的 - 没有rtl和虔诚的文本。 我已经用控制台应用程序尝试了这个代码,它运行得很好。出于某种原因,使用我的项目(ASP.NET Core,只有返回数据的控制器,而不是视图),我得到了这种行为。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

好的,现在这真的很奇怪......我已经将iTextSharp.dll替换为版本4.1.2并且它可以工作。我并不是说我们会继续使用这个版本,但至少看起来它可能与版本4.1.6特别相关。

HTH