2017-01-18 4 views
0

iTextSharp LGPL/MPL(4.1.6)を使用して左から右のヘブライ語PDFをメモリに作成し、それをクライアントに返そうとしています。私はこの問題を抱えています:iTextSharpとASP.NETコアでRTLヘブライ語pdfを作成する

テキストは確かにヘブライ語ですが、右から左ではなく、テキストは逆です。

コード:このコードは、別のSO質問から取得され

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; 
    } 

、コントローラは、次にAngularJSに戻っのMemoryStreamとIActionResultを返すためにこのラインを呼び出しhere

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

そして、ここにPDF出力があります: enter image description here

ご覧のとおり、文字は逆順で、方向はrtlではなくltrです。 私はMemoryStreamの代わりにFileStreamを使用しようとしましたが、結果は同じでした - rtlと敬称されたテキストはありませんでした。 私はこのコードをコンソールアプリケーションで試してみましたが、うまくいきます。何らかの理由で、私のプロジェクト(ASP.NET Core、データを返すだけのコントローラ、ビューではない)では、私はこの動作を取得します。

提案がありますか?

+0

あなたが言及したバージョン(iTextSharp LGPL/MPL 4.1.6)がサポートされなくなりました。このバージョンは、お客様に販売する製品や製品には使用しないでください。よくある質問:[iText 2.1.7/iTextSharp 4.1.6以前は商用で利用できますか?](http://developers.itextpdf.com/question/versions-older-than-5) –

+0

実際には、本当に良いタイポグラフィー、あなたはpdfCalligraphアドオンでiText 7が必要です。 iText 7以降、pdfCalligraphアドオンは、文字のUnicode値に基づいて言語を自動的に検出し、それに応じて実行方向を適応させます。 –

+0

ありがとう、ブルーノ。当社の製品はウェブアプリケーションであり、販売されていないか、何かを販売しており、とにかく商業的ではありません。それは学校とその生徒のレポジトリです。私はこの種のアプリケーションのために大丈夫だと思います。 – ashilon

答えて

0

これは本当に変です...私はiTextSharp.dllをバージョン4.1.2に置き換えました。私はこのバージョンを使い続けようとしているわけではありませんが、少なくともバージョン4.1.6に関係しているようです。

HTH

関連する問題