تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
تصدير البيانات الى PDF باستخدام ITextSharp لايدعم اللغة العربية
#1
السلام عليكم 


قمت بعمل تصدير للبيانات من DGV-Visual Basic EXPRESS 2010 الى PDF
بإستخدام ITextSharp

لكن بيناتي كانت باللغة العربية لذا لم تُصَدّر
وعند إدخال بيانات باللغة الانجليزية تم تصديرها بنجاح

ماهي الطريقة لتصدير البيانات من ال DGV في الفيجوال بيسك للPDF بالعربي

PHP كود :
Imports iTextSharp.text
Imports iTextSharp
.text.pdf 
PHP كود :
Private Sub Button3_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles Button3.Click
        Dim pdfTable 
As New PdfPTable(DataGridView1.ColumnCount)
 
       pdfTable.DefaultCell.Padding 3
        pdfTable
.WidthPercentage 30
        pdfTable
.HorizontalAlignment Element.ALIGN_LEFT
        pdfTable
.DefaultCell.BorderWidth 1
        
'Adding Header row
        For Each column As DataGridViewColumn In DataGridView1.Columns
            Dim cell As New PdfPCell(New Phrase(column.HeaderText))
            '
cell.BackgroundColor = New iTextSharp.text.Color(240240240)
 
           pdfTable.AddCell(cell)
 
       Next
        
'Adding DataRow
        For Each row As DataGridViewRow In DataGridView1.Rows
            For Each cell As DataGridViewCell In row.Cells
                If cell.Value IsNot Nothing AndAlso cell.Value.ToString <> "" Then
                    pdfTable.AddCell(cell.Value.ToString())
                Else
                    pdfTable.AddCell("")
                End If
            Next
        Next
        '
Exporting to PDF
        Dim folderPath 
As String "C:\Users\sh\Desktop\FP\"
        If Not Directory.Exists(folderPath) Then
            Directory.CreateDirectory(folderPath)
        End If
        Using stream As New FileStream(folderPath & "
DataGridViewExport.pdf", FileMode.Create)
            Dim pdfDoc As New Document(PageSize.A2, 10.0F, 10.0F, 10.0F, 0.0F)
            PdfWriter.GetInstance(pdfDoc, stream)
            pdfDoc.Open()
            pdfDoc.Add(pdfTable)
            pdfDoc.Close()
            stream.Close()
        End Using
    End Sub 
الرد
تم الشكر بواسطة: Hamza lads , Hamza lads
#2
ارجو المساعدة
الرد
تم الشكر بواسطة: Hamza lads
#3
السلام عليكم

تفضلي الكود
كود :
   Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click

       ' تجهيز الجدول
       Dim pdfTable As New PdfPTable(DataGridView1.ColumnCount)
       pdfTable.DefaultCell.Padding = 3
       pdfTable.WidthPercentage = 30 ' عرض الجدول بنسبة 30% من عرض الصفحة

       ' توسيط الجدول في الصفحة
       pdfTable.HorizontalAlignment = Element.ALIGN_CENTER

       ' تفعيل الاتجاه من اليمين لليسار - ضروري للغة العربية
       pdfTable.RunDirection = PdfWriter.RUN_DIRECTION_RTL

       ' تحديد سماكة الاطار
       pdfTable.DefaultCell.BorderWidth = 1

       ' تعيين ارتفاع افتراضي لخلايا الجدول
       pdfTable.DefaultCell.FixedHeight = 100.0F


       ' الخطوط يجب أن تكون من خطوط النظام لتوافقها مع اللغة العربية
       ' لكن لها طريقة خاصة من معرفة مسار ملف اسم الملف الأصلي كالتالي

       ' تجهيز خط من النظام - آريـال عريض
       ' Arial (Bold) font
       Dim fontArialBoldPath As String = IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "arialbd.ttf")
       Dim fontArialBold As BaseFont = BaseFont.CreateFont(fontArialBoldPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED)
       ' fontArialBold يتم استخدام هذا الاسم للخط


       ' قراءة عناوين أعمدة جدول الداتاجريدفيو
       For Each column As DataGridViewColumn In DataGridView1.Columns

           ' تحديد الخط وحجمه
           Dim fnt As New Font(fontArialBold, 24)
           ' تجهيز محتوى الخلية مع الخط
           Dim pdfCell As New PdfPCell(New Phrase(column.HeaderText, fnt))

           ' إرتفاع الخلية
           pdfCell.FixedHeight = 40

           ' تغيير لون خلفية الخلية
           pdfCell.BackgroundColor = New iTextSharp.text.BaseColor(240, 240, 240)

           ' توسيط عمودي
           pdfCell.VerticalAlignment = Element.ALIGN_MIDDLE
           ' توسيط أفقي
           pdfCell.HorizontalAlignment = Element.ALIGN_CENTER

           ' إضافة الخلية إلى الجدول
           pdfTable.AddCell(pdfCell)
       Next


       ' تعيين عرض الأعمدة
       Dim columnsWidth() As Integer = (From x In DataGridView1.Columns Select CInt(x.Width)).ToArray
       If DataGridView1.RightToLeft = Windows.Forms.RightToLeft.Yes Then Array.Reverse(columnsWidth)
       pdfTable.SetWidths(columnsWidth)


       ' قراءة أسطر جدول الداتاجريدفيو
       For Each row As DataGridViewRow In DataGridView1.Rows
           ' يتم الخروج من الحلقة إذا كان السطر الأخير الجديد
           If row.IsNewRow Then Exit For

           ' قراءة خلايا سطر جدول التاجريدفيو
           For Each cell As DataGridViewCell In row.Cells
               ' تصحيح محتوى نص خلية جدول التاجريدفيو
               If IsNothing(cell.Value) Then cell.Value = String.Empty

               ' تحديد الخط وحجمه ولونه
               Dim fnt = New iTextSharp.text.Font(fontArialBold, 24, iTextSharp.text.Font.NORMAL, New BaseColor(193, 36, 67))
               '' تحديد الخط وحجمه بدون تحديد اللون
               'Dim fnt = New iTextSharp.text.Font(fontTimesNewRomanBold, 24)

               ' تجهيز محتوى الخلية مع الخط مع مسافة قبلها
               Dim pdfCell As New PdfPCell(New Phrase(" " & cell.Value, fnt))

               ' إرتفاع الخلية
               pdfCell.FixedHeight = 60

               ' توسيط عمودي
               pdfCell.VerticalAlignment = Element.ALIGN_MIDDLE

               ' إضافة الخلية إلى الجدول
               pdfTable.AddCell(pdfCell)

           Next

       Next


       ' تجهيز المجلد
       Dim folderPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\FP\"
       If Not IO.Directory.Exists(folderPath) Then IO.Directory.CreateDirectory(folderPath)
       ' إسم الملف كامل مع المسار
       Dim fileName As String = folderPath & "DataGridViewExport.pdf"

       ' تجهيز المستند
       Dim pdfDoc As New Document(PageSize.A2, 10.0F, 10.0F, 10.0F, 0.0F)
       ' كتابة المستند في الملف
       PdfWriter.GetInstance(pdfDoc, New IO.FileStream(fileName, IO.FileMode.Create))
       pdfDoc.Open()
       pdfDoc.Add(pdfTable)
       pdfDoc.Close()

   End Sub


تمت إضافة كود تعيين عرض الأعمدة
الرد
تم الشكر بواسطة: فاطمة غ , فاطمة غ , tariq2812 , Hamza lads
#4
@مساعدة

الله يجزاك خير يارب شكرًا كثيراً لك
الحمدلله نجح

لكن احتاج اعيد ترتيب الاعمدةو مثلًا بعض البيانات مثل الاسم تكون طويلة والتاريخ احتاج يكون حجم الcell اصغر من الاسم.
الرد
تم الشكر بواسطة: Hamza lads
#5
أولا للتوضيح: تعيين عرض أعمدة الجدول pdfTable دائما من اليسار حتى لو تم تعيين RUN_DIRECTION_RTL

لتعيين عرض أعمدة الجدول pdfTable مباشرة تفضلي الكود الترتيب يبدأ من العمود الأول وهو العمود الأيسر
يجب تعيين رقم لجميع الأعمدة وإلا سيحدث خطأ في حالة النقص أو الزيادة عن عدد الأعمدة
كود :
pdfTable.SetWidths({3,5,9})
وكل رقم هو نسبة من مجموع الأرقام
مثال لجدول بثلاث أعمدة 3،5،9 هنا مجموع الأرقام يساوي 17
فالعمود الذي أخذ الرقم3 سيكون عرضة 3/17 من عرض الجدول pdfTable
والعمود الذي أخذ الرقم5 سيكون عرضة 5/17 من عرض الجدول pdfTable
والعمود الذي أخذ الرقم9 سيكون عرضة 9/17 من عرض الجدول pdfTable



وهذه طريقة أخرى في اعتقادي أنها تسهل العملية أكثر
وهي طريقة من أجل التوافق مع عرض الأعمدة في الداتاجريدفيو
مع وضع كود ليأخذ في الاعتبار خاصية RightToLeft للداتاجريدفيو من اليمين لليسار
كود :
Dim columnsWidth() As Integer = (From x In DataGridView1.Columns Select CInt(x.Width)).ToArray
If DataGridView1.RightToLeft = Windows.Forms.RightToLeft.Yes Then Array.Reverse(columnsWidth)
pdfTable.SetWidths(columnsWidth)



المعلومة الأخير يمكن وضع هذا الكود في أي مكان سواء قبل قراءة عناوين أعمدة الداتاجريدفيو أو بعده أو بعد الإنتهاء من قراءة الداتاجريدفيو ككل،
المهم أن يكون قبل إضافة جدول pdfTable للمستند pdfDoc

تمت إضافة الكود إلى الكود في المشاركة السابقة
الرد
#6
طيب عندي سؤال اخر

بعد الانتهاء وجعله برنامج حقيقي قابل للاستخدام
هل اقدر اعدل بالاكواد؟
مثلا البرنامج الي سويته لازم اسوي منه نسخه للمركز ونسخ اخرى لروضات وكل روضه اكتب عليها اسمها
الرد
تم الشكر بواسطة:
#7
@مساعدة
ممكن ايميلك لو سمحتي
الرد
تم الشكر بواسطة:
#8
كيف ممكن اغير الديستنيش\باث لل pdf
Data Source=C:\Users\sh\Desktop\TEST\Database.accdb
هذا الباث القديم ويعمل
وقمت بتغييره الى 
Data Source=C:|Data Directory|\Database.accdb
ولكن لم يعمل !

كيف ممكن اخليه يشتغل على كل الاجهزة الي اضيف البرنامج لها + الداتا بيس هل راح ينتقل بعد ما اسوي فاينلايز للبرنامج ولا ما احتاج انقله؟
*يعني لو حطيت البرنامج بجهاز مثلا مافيه اكسس "بحكم انه الداتا بيس حقي" هل راح يشتغل البرنامح؟
الرد
تم الشكر بواسطة:
#9
ممكن التعديل بالأكود

تغيير الديستنيش\باث

اولا يمكن الحصول على مسار سطح المكتب أو المستندات حتى لو اختلف اسم المستخدم في الجها الأخر وهذا هو الكود
كود :
Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim documentsPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
وبعدها يمكن اضافة اسم المجلد الخاص بملف pdf بعد وضع الفاصل \ مثل
كود :
Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

Dim filenamePath As String = desktopPath & "\FP\"

طريقتك Data Directory غير صحيحة لأنها تستخدم مع مسار قاعدة البيانات فقط وليس الملفات
الرد
تم الشكر بواسطة: Hamza lads
#10
(04-01-17, 12:00 AM)مساعدة كتب : ممكن التعديل بالأكود

تغيير الديستنيش\باث

اولا يمكن الحصول على مسار سطح المكتب أو المستندات حتى لو اختلف اسم المستخدم في الجها الأخر وهذا هو الكود
كود :
Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim documentsPath As String = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
وبعدها يمكن اضافة اسم المجلد الخاص بملف pdf بعد وضع الفاصل \ مثل
كود :
Dim desktopPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

Dim filenamePath As String = desktopPath & "\FP\"

طريقتك Data Directory غير صحيحة لأنها تستخدم مع مسار قاعدة البيانات فقط وليس الملفات

مساء الخير انا عندي مشكلة في ملفات 
Imports iTextSharp
Imports iTextSharp.text.pdf
Imports iTextSharp.text
ما عرفت اتعامل معها يطلع لي تحتخها خط اخضر كيف اعرف المشروع عليها 

مع العلم مشروعي asp.net - vb?
الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] تعديل البيانات من خلال فورم آخر EbrNaj00 6 197 16-09-20, 12:42 AM
آخر رد: EbrNaj00
  المساعدة في التعديل على كود تعديل البيانات في قاعدة سيكوال سيرفر momani33 3 74 15-09-20, 08:10 PM
آخر رد: Anas Mahmoud
  تصدير محتويات datagridview الى pdf كرم ابوهشام 7 1,866 15-09-20, 12:34 AM
آخر رد: حريف برمجة
  ربط قاعدة البيانات محمود احمد سعد 1 80 14-09-20, 03:49 PM
آخر رد: اسامه الهرماوي
  ربط قاعدة البيانات محمود احمد سعد 1 88 14-09-20, 03:00 PM
آخر رد: Anas Mahmoud
  حاجة غريبة بتحصل فى قاعدة البيانات mostafa nada 4 108 14-09-20, 08:41 AM
آخر رد: الوايلي
  هل الاستعلام وعرض البيانات عن طريق الكويري أسرع وأفضل new_programer 2 254 10-09-20, 04:58 PM
آخر رد: new_programer
  [VB.NET] احتاج الى كود ترحيل البيانات بنت الشام 2 149 08-09-20, 09:42 PM
آخر رد: Anas Mahmoud
  مشكلة عند حفظ البيانات في قاعدة بيانات SQL Server momani33 4 192 08-09-20, 03:44 PM
آخر رد: Hasaneen
  [سؤال] تنظيم ارفاق المستندات في قاعدة البيانات Sql واحضار الملفات حسب قيمة البحث محمد العامر 10 380 07-09-20, 12:28 AM
آخر رد: محمد العامر

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم