تقييم الموضوع :
  • 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] حل مشكلة الاتصال بقواعد البيانات access loay775 2 158 25-02-24, 06:29 AM
آخر رد: loay775
  [VB.NET] البحث باستخدام CheckedListBox لتكون نتيجة التحديد شرط لجملة الاستعلام ahmedramzyaish 0 116 19-02-24, 03:44 AM
آخر رد: ahmedramzyaish
  سؤال عن عملية حذف سجل من قاعدة البيانات assuhimi 3 249 11-02-24, 08:43 PM
آخر رد: assuhimi
  [VB.NET] منع تكرار البيانات في عند الادخال مبرمج صغير 1 2 255 24-01-24, 05:18 PM
آخر رد: مبرمج صغير 1
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 274 18-01-24, 05:04 PM
آخر رد: loay775
  [VB.NET] إعادة استدعاء البيانات من قاعدة بيانات اكسس والاهم الصورة مبرمج صغير 1 1 273 13-01-24, 01:17 PM
آخر رد: مبرمج صغير 1
  [VB.NET] إضافة أو حذف حقل فى قاعدة بيانات باستخدام كود VB.net AmeenRashed 21 1,198 30-12-23, 03:47 PM
آخر رد: Taha Okla
  [كود] اريد كود إرسال البيانات من الفيجوال بيسك إلىPDF issamsaidd 10 5,829 25-12-23, 06:30 PM
آخر رد: الحزين اليماني
  جملة الاتصال بقاعدة البيانات اكسس محمد خيري 4 362 12-12-23, 03:14 AM
آخر رد: محمد خيري
  كود الاتصال بقاعدة البيانات sqlserver strongriseman 2 421 29-11-23, 09:25 PM
آخر رد: العتيق

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


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