Я пытаюсь создать слева направо, иврит 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");
Как вы можете видеть, буквы меняются в обратном направлении, а направление - ltr, а не rtl. Я попытался использовать FileStream вместо MemoryStream, но результат был тот же - нет rtl и reveresed text. Я пробовал этот код с консольным приложением, и он работает отлично. По какой-то причине, с моим проектом (ASP.NET Core, с контроллерами, которые только возвращают данные, а не представлениями), я получаю это поведение.
Любые предложения?
версия вы упоминаете (iTextSharp LGPL/MPL 4.1.6) больше не поддерживается. Имейте в виду, что эта версия больше не должна использоваться в продуктах или продуктах, которые вы продаете клиентам. Пожалуйста, прочтите FAQ: [Может ли iText 2.1.7/iTextSharp 4.1.6 или ранее использоваться на коммерческой основе?] (Http://developers.itextpdf.com/question/versions-older-than-5) –
Собственно, если вы хотите действительно хорошая типография, вам нужен iText 7 с надстройкой pdfCalligraph. Начиная с iText 7, надстройка pdfCalligraph автоматически определяет язык на основе значений Unicode символов и соответственно адаптирует направление прогона. –
Спасибо, Бруно. Наш продукт - это веб-приложение, оно не продается или продается, и в любом случае оно не является коммерческим. Это хранилище школ и их учеников. Я надеюсь, что это нормально для подобных приложений. – ashilon