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ü

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 (Paragraph
Phrase
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.
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 –
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. –
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 –