izinkan teks arab dalam tabel pdf menggunakan itext7 (xamarin android)

Saya harus memasukkan data daftar saya ke dalam tabel dalam file pdf. Data saya memiliki beberapa kata Arab. Saat pdf saya dibuat, kata-kata Arabnya tidak muncul. Saya mencari dan menemukan bahwa saya memerlukan itext7.pdfcalligraph jadi saya menginstalnya di aplikasi saya. Saya juga menemukan kode ini https://itextpdf.com/en/blog/technical-notes/displaying-text-different-linguals-single-pdf-document dan mencoba melakukan hal serupa untuk mengizinkan kata-kata Arab di tabel saya tetapi saya tidak dapat menemukannya keluar.

Ini adalah kode percobaan sebelum saya menerapkannya ke daftar saya yang sebenarnya:

var path2 = global::Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
filePath = System.IO.Path.Combine(path2.ToString(), "myfile2.pdf");
stream = new FileStream(filePath, FileMode.Create);
PdfWriter writer = new PdfWriter(stream);
PdfDocument pdf2 = new iText.Kernel.Pdf.PdfDocument(writer);
            
Document document = new Document(pdf2, PageSize.A4);
FontSet set = new FontSet();
set.AddFont("ARIAL.TTF");


document.SetFontProvider(new FontProvider(set));
document.SetProperty(Property.FONT, "Arial");
 
string[] sources = new string[] { "يوم","شهر 2020" };
 iText.Layout.Element.Table table = new iText.Layout.Element.Table(2, false);
 foreach (string source in sources)
                {
                    Paragraph paragraph = new Paragraph();
                    Bidi bidi = new Bidi(source, Bidi.DirectionDefaultLeftToRight);
                    if (bidi.BaseLevel != 0)
                    {
                        paragraph.SetTextAlignment(iText.Layout.Properties.TextAlignment.RIGHT);
                    }

                    paragraph.Add(source);
                    table.AddCell(new Cell(1, 1).SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER).Add(paragraph));
                }
                document.Add(table);
                document.Close();

Saya memperbarui kode saya dan menambahkan arial.ttf ke folder aset saya. saya mendapatkan pengecualian berikut:

System.InvalidOperationException: 'FontProvider dan FontSet kosong. Tidak dapat menyelesaikan nama keluarga font (lihat ElementPropertyContainer#setFontFamily) tanpa menginisialisasi FontProvider (lihat RootElement#setFontProvider).' dan aku masih belum bisa memahaminya. ada ide? Terima kasih sebelumnya


person rana hd    schedule 07.09.2020    source sumber
comment
Harap ubah kode Anda agar mandiri dan merupakan sampel minimal yang dapat direproduksi. Saat ini ia memiliki entri tableItems yang tidak ditentukan serta kode komentar textView, Toast, Rsultitem yang berlebihan.   -  person Alexey Subach    schedule 07.09.2020
comment
tolong beri tahu saya jika kode yang diedit baik-baik saja   -  person rana hd    schedule 07.09.2020
comment
Kesalahannya berbicara sendiri: FontProvider and FontSet are empty.. Periksa nilai pengembalian set.AddFont("ARIAL.TTF") - menurut dokumentasi, metode ini mengembalikan true jika font berhasil ditambahkan dan false sebaliknya   -  person Alexey Subach    schedule 08.09.2020
comment
ya hasilnya salah, saya mengubah jalur font saya menjadi ini: set2.AddFont("C:\\Windows\\Fonts\\Arial.TTF"); tetapi masih sama. apa yang harus saya lakukan?   -  person rana hd    schedule 08.09.2020
comment
Apakah hasilnya benar atau salah? Apakah new File("C:\\Windows\\Fonts\\Arial.TTF").exists() menghasilkan nilai benar atau salah?   -  person Alexey Subach    schedule 10.09.2020


Jawaban (1)


- C #

Saya memiliki situasi serupa untuk karakter Turki, dan saya telah mengikuti langkah-langkah berikut:

  • Buat folder di bawah folder root proyek yaitu: /wwwroot/Fonts
  • Tambahkan OpenSans-Regular.ttf di bawah folder Font

Jalur untuk font adalah =› ../wwwroot/Fonts/OpenSans-Regular.ttf

  • Buat font seperti di bawah ini:
public static PdfFont CreateOpenSansRegularFont()
{
    var path = "{Your absolute path for FONT}";
    return PdfFontFactory.CreateFont(path, PdfEncodings.IDENTITY_H, true);
}

dan menggunakannya seperti:

paragraph.Add(source)
         .SetFont(FontFactory.CreateOpenSansRegularFont());  //set font in here

table.AddCell(new Cell(1, 1)
     .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER)
     .Add(paragraph));

Beginilah cara saya menggunakan pabrik font untuk karakter Turki, misalnya: ü,i,ç,ş,ö

Untuk Xamarin-Android, Anda bisa mencobanya

string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
var path = Path.Combine(documentsPath, "Fonts/Arial.ttf");
person Burak    schedule 09.09.2020
comment
Hai pak, terima kasih sudah merespons, tetapi di mana saya dapat menemukan folder wwwroot untuk xamarin Android, saya telah menggunakan beberapa cara untuk mengakses jalur file ttf saya yang ditemukan di folder aset saya tetapi saya tetap mendapatkan pengecualian ini: System.IO. IOException: jalur saya tidak ditemukan sebagai file atau sumber daya. - person rana hd; 09.09.2020
comment
tentu pak, saya terus-menerus mengubah kode saya untuk menemukan solusi, tetapi semua jalur yang saya gunakan memberi saya pengecualian yang saya sebutkan. ``` PdfFont arab= PdfFontFactory.CreateFont(@C:\Windows\Fonts\Arial.ttf); document2.SetFont(arab);``` saya mendapatkannya di jalur di dalam fungsi createfont saya - person rana hd; 09.09.2020
comment
ya pak, saya juga mencobanya, saya menambahkannya di folder aset saya tetapi saya mendapat masalah yang sama - person rana hd; 09.09.2020
comment
sayangnya, saya tidak dapat memperbaikinya :( sepertinya lingkungan hosting ditujukan untuk web. Saya mencoba yang berikut: string fn = "Arial.ttf"; string fp = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal); string pc=System.IO.Path.Combine(fp,fn); PdfFont russian = PdfFontFactory.CreateFont(pc); tetapi masih sama - person rana hd; 09.09.2020
comment
Silakan periksa yang ini stackoverflow.com/questions/41676173/ - person Burak; 09.09.2020
comment
Untuk menghindari percakapan panjang di komentar, saya telah mengedit jawaban saya, silakan lihat, dan jika Anda masih mendapatkan kesalahan, silakan bagikan jejak tumpukan kesalahan sehingga saya dapat melihat pengecualiannya. - person Burak; 09.09.2020
comment
oke pak, saya akan mencoba kode yang anda sebutkan, tapi bagaimana cara membagikan jejak tumpukan kesalahan - person rana hd; 09.09.2020
comment
masih ada : System.IO.IOException: '/data/user/0/com.companyname.app36/files/fonts\ARIAL.TTF not found as file or resource.' ini sangat menjengkelkan :( - person rana hd; 09.09.2020
comment
/fonts\ARIAL.TTF harus /fonts/ARIAL.TTF - person Burak; 09.09.2020
comment
ya saya perhatikan itu, saya koreksi tapi tetap System.IO.IOException: '/data/user/0/com.companyname.app36/files/fonts/ARIAL.TTF not found as file or resource.' :( - person rana hd; 09.09.2020