2015-11-16 20 views
5

itext lib programını kullanarak PDF dosyası oluşturuyorum. Arapça kelimeler yazmak istiyorum. Aşağıdaki kodu çalıştırdığımda, Kelimeler karakterleri ters olarak görüntülenir.Itext kullanarak pdf'de Arapça yazma

kullanılan kod:

PdfContentByte cb = docWriter.getDirectContent(); 
BaseFont bfBold = BaseFont.createFont("assets/arial.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 


createHeadings(cb, document.leftMargin(), 70, "السعر الاجمالي: " + tprice + " L.E."); 

. . . http://i.stack.imgur.com/OLoLo.jpg

cevap

6

Ligatures2 Örneğin bir göz atın lütfen:

private void createHeadings(PdfContentByte cb, float x, float y, String text){ 
     cb.beginText(); 
     cb.setFontAndSize(bfBold, 10); 
     cb.setTextMatrix(x,y); 
     cb.showText(text.trim()); 
     cb.endText(); 
    } 

Bu görüntü Yukarıdaki kod çıkışı anlatılmaktadır.

bu çizgiyi unutmuyor: iText sol ve gerektiğinde Ligatürleri oluşturmak için sağdan metin yazmak istediğinizde

cb.setRunDirection(PdfWriter.RUN_DIRECTION_RTL); 

setRunDirection() yöntem gereklidir. Bu yöntem ayrıca, bir ColumnText nesnesinin yerine PdfPCell nesnesine uygulayacağınız tablo bağlamında da vardır.

Ayrıca, neden bu String: "السعر الاجمالي: "'u kullandığınızı anlamıyorum. Bunun yerine Unicode notasyonu kullanın (ör. "\u0644\u0648\u0631\u0627\u0646\u0633 \u0627\u0644\u0639\u0631\u0628" gibi), sizinki gibi bir String kullanmak, kodlama ve ligatürlerle ilgili her türlü karışıklığı yaratabilir. Bazı editörler doğru kodlamayı kullanmayacaktır (metninizi anlamsız hale getirerek); Bazı editörler ligatürler yaparlar (iText'in beklediği gibi).

Örneğin, durumda, ben Arapça bilmiyorum, bu yüzden değeri \u0627 ile ya da glyph'ten okumak için başlamak zorunda olmadığını bilmiyorum çünkü "\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a" veya "\u064a\u0644\u0627\u0645\u062c\u0627\u0644\u0627 \u0631\u0639\u0633\u0644\u0627" eğer bilmiyorum \u064a değerine sahip glif. Her durumda: iText, String'daki ilk "karakter" in, insanlar tarafından okunan ilk şey olmasını bekler.

ArabicExample Örneğin bir göz atın lütfen: document.add() kullanırken RTL ne de Arapça ligaturler desteklenmektedir çünkü

enter image description here

ilk satırı, yanlıştır. İkinci satır doğrudur (bildiğim kadarıyla: Arapça okuyamıyorum) çünkü ColumnText'u kullandım.

Bu

kullandığım kod şudur:

public static final String FONT = "resources/fonts/NotoNaskhArabic-Regular.ttf"; 
public static final String ARABIC = "\u0627\u0644\u0633\u0639\u0631 \u0627\u0644\u0627\u062c\u0645\u0627\u0644\u064a"; 

public void createPdf(String dest) throws IOException, DocumentException { 
    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); 
    document.open(); 
    Font f = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
    Phrase p = new Phrase("This is incorrect: "); 
    p.add(new Chunk(ARABIC, f)); 
    p.add(new Chunk(": 50.00 USD")); 
    document.add(p); 

    p = new Phrase("This is correct: "); 
    p.add(new Chunk(ARABIC, f)); 
    p.add(new Phrase(": 50.00")); 

    ColumnText canvas = new ColumnText(writer.getDirectContent()); 
    canvas.setSimpleColumn(36, 750, 559, 780); 
    canvas.setRunDirection(PdfWriter.RUN_DIRECTION_LTR); 
    canvas.addElement(p); 
    canvas.go(); 

    document.close(); 
} 

Ben Phrase kullanılır, ancak bir Paragraph kullanırken (ParagraphPhrase genişletir) aynı sonucu bekleyebilirsiniz. Lütfen sorunuza cevap vermiyorsa açıklayın. StackOverflow'taki çoğu kişinin Arapça'yı anlamadığını göz önünde bulundurun, bu yüzden bir soru sorduğunuzda ve "işe yaramadı" dediğinizde çok açık olmalısınız. Arapça bilmediğimizden, bunun nasıl olması gerektiğini bilmiyoruz.

+1

Zaten bir masa hazırladım ve arabayı (cell.setRunDirection) özelleştirerek Arapça yazdım ve işe yarıyor. Ancak bu durumda yukarıdakileri özelleştiremiyorum (cb). @Bruno –

+1

Yorumunuz, sorunun çözüldüğü anlamına mı geliyor?Cevabımı "setRunDirection()" yönteminin de "PdfPCell" için de varolduğunu ekleyerek uyarlayacağım. Bu sizin için çalışıyorsa, lütfen cevabı kabul edin. –

+1

Hayır, sormadan önce yaptığım buydu. Ben pdf arapça yazabilirsiniz ama pdf bir parçası parçaları var sorunu sorunu Arapça desteklenen tablo ve diğer bölüm sayfadaki diğer metin ve ben arabikçe yazamıyorum bu yüzden sordum Bu soru –

İlgili konular