2017-01-18 2 views
0

Я пытаюсь создать слева направо, иврит PDF в памяти с помощью iTextSharp LGPL/MPL (4.1.6) и вернуть его клиенту. У меня есть эта проблема:Создать RTL иврит pdf с iTextSharp и ASP.NET Core

Текст действительно на иврите, но не справа налево, и текст обратный.

Код:

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

Контроллер затем называет эту линию, чтобы возвращать IActionResult с MemoryStream обратно AngularJS:

return File(ms, "application/pdf", "somefile.pdf"); 

И вот pdf-выход: enter image description here

Как вы можете видеть, буквы меняются в обратном направлении, а направление - ltr, а не rtl. Я попытался использовать FileStream вместо MemoryStream, но результат был тот же - нет rtl и reveresed text. Я пробовал этот код с консольным приложением, и он работает отлично. По какой-то причине, с моим проектом (ASP.NET Core, с контроллерами, которые только возвращают данные, а не представлениями), я получаю это поведение.

Любые предложения?

+0

версия вы упоминаете (iTextSharp LGPL/MPL 4.1.6) больше не поддерживается. Имейте в виду, что эта версия больше не должна использоваться в продуктах или продуктах, которые вы продаете клиентам. Пожалуйста, прочтите FAQ: [Может ли iText 2.1.7/iTextSharp 4.1.6 или ранее использоваться на коммерческой основе?] (Http://developers.itextpdf.com/question/versions-older-than-5) –

+0

Собственно, если вы хотите действительно хорошая типография, вам нужен iText 7 с надстройкой pdfCalligraph. Начиная с iText 7, надстройка pdfCalligraph автоматически определяет язык на основе значений Unicode символов и соответственно адаптирует направление прогона. –

+0

Спасибо, Бруно. Наш продукт - это веб-приложение, оно не продается или продается, и в любом случае оно не является коммерческим. Это хранилище школ и их учеников. Я надеюсь, что это нормально для подобных приложений. – ashilon

ответ

0

ОК, теперь это действительно странно ... Я заменил iTextSharp.dll на версию 4.1.2, и он работает. Я не говорю, что мы будем продолжать использовать эту версию, но по крайней мере кажется, что она, вероятно, специально связана с версией 4.1.6. не

НТН

 Смежные вопросы

  • Нет связанных вопросов^_^