طباعة قائمة combobox الى ملف PDF - Tajaldeen - 09-02-23
السلام عليكم
الكود التالي يقوم بطباعة شهادات الطلاب الى ملف PDF بشكل جماعي من تقرير ReportViewer (أي أن جميع المخرجات تكون داخل ملف واحد) لكي يسهل علي طباعتها بعد ذلك بكبسة زر واحدة من ملف ال PDF عوضا عن طباعة كل شهادة بتغيير قيمة combobox من الفورم في كل مرة.
المشكلة الوحيدة أن هناك بعض حقول (Parameters) في الشهادة غير مرتبطة بال Dataset ولا يتم طباعتها إلا للشهادة الحالية وتوزع على بقية الشهادات التي يفترض أن يأخذ كل طالب قيم ال Parameters الخاصة به ، ولكن هذا لا يحدث حيث تأخذ كل الشهادات قيم ال Parameters الخاصة بالشهادة الحالية اما الحقول المرتبطة بال Dataset فتتغير لكل طالب بدون أي مشاكل . مع انني عندما أختار طالب من ال Combobox تتغير جميع القيم بما فيها حقول ال Parameters
أرجوا ان تكون المشكلة واضحة
ودمتم بخير
ملاحظة : هذا الكود لا يعمل إلا بعد تثبيت الملحق iTextSharp وتضمين المكتبات iTextSharp.text و iTextSharp.text.pdf
كود :
Private Sub PrintAll_Click(sender As Object, e As EventArgs)
Me.Cursor = Cursors.WaitCursor
Me.DataSet1.DataTable1.Clear()
Me.DataTable1TableAdapter.Fill(Me.DataSet1.DataTable1)
Dim outputFile As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "AllStudents.pdf")
Dim document As New Document
Dim pdfCopy As PdfCopy = New PdfCopy(document, New FileStream(outputFile, FileMode.Create))
document.Open()
Dim customersCopy As DataSet1.DataTable1DataTable = DataSet1.DataTable1.Copy()
For Each row As DataRow In customersCopy.Rows
Me.DataTable1TableAdapter.Search_ID(Me.DataSet1.DataTable1, row("ID").ToString())
Me.ReportViewer1.RefreshReport()
Dim pdfRenderBytes As Byte() = ReportViewer1.LocalReport.Render("PDF")
Dim reader As New PdfReader(pdfRenderBytes)
For i As Integer = 1 To reader.NumberOfPages
pdfCopy.AddPage(pdfCopy.GetImportedPage(reader, i))
Next
reader.Close()
Next
document.Close()
Process.Start(outputFile)
Me.Cursor = Cursors.Default
End Sub
RE: طباعة قائمة combobox الى ملف PDF - Taha Okla - 09-02-23
السلام عليكم ورحمة الله وبركاته
--
بشكل عام التقارير تتكون من ثلاث مناطق :
- الترويسة (ترويسة بأول صفحة من التقرير وترويسة لكل صفحة).
- التذييل (تذييل لكل صفحة وتذييل بخر صفحة للتقرير).
- عرض التقرير (وهي المنطقة ما بين الترويسة والتذييل).
أي بيانات تضعها ضمن الترويسة أو التذييل سيأخذها التقرير مرة واحدة وسوف تتكرر.
وأي بيانات تضعها ضمن عرض التقرير فلن تتكرر ، وسيتم سردها بحسب جملة الاستعلام التي زودت بها التقرير.
المشكلة التي تتحدث عنها توضح أن هناك خطأ بتصميم التقرير،،
مما سبق يعني : عليك أن تجعل البيانات التي لا تريد تكرارها ضمن عرض التقرير وليس في( الترويسة والتذييل).
--
أحببت أن ألفت انتباهك لهذه النقطة،،
فهذا ما أعرفه وربما غيري يستطيع افادتك أكثر مني..
أعتذر أني لم أستطع أن أفيدك أكثر من ذلك.
--
طريقة آخرى للحل :
تصور أنك تبني قالب ضمن داتاتيبل .. تضع فيه كل البيانات التي تريدها لكل طالب ضمن سطر(سجل) واحد.، ثم الطالب الذي يليه ضمن السجل الثاني.
وتجعل هذا الجدول الافتراضي مصدراً لهذا التقرير، سيكون عندها الأمر أبسط..
RE: طباعة قائمة combobox الى ملف PDF - estefsar - 14-02-23
(09-02-23, 08:38 PM)Tajaldeen كتب : السلام عليكم
الكود التالي يقوم بطباعة شهادات الطلاب الى ملف PDF بشكل جماعي من تقرير ReportViewer (أي أن جميع المخرجات تكون داخل ملف واحد) لكي يسهل علي طباعتها بعد ذلك بكبسة زر واحدة من ملف ال PDF عوضا عن طباعة كل شهادة بتغيير قيمة combobox من الفورم في كل مرة.
المشكلة الوحيدة أن هناك بعض حقول (Parameters) في الشهادة غير مرتبطة بال Dataset ولا يتم طباعتها إلا للشهادة الحالية وتوزع على بقية الشهادات التي يفترض أن يأخذ كل طالب قيم ال Parameters الخاصة به ، ولكن هذا لا يحدث حيث تأخذ كل الشهادات قيم ال Parameters الخاصة بالشهادة الحالية اما الحقول المرتبطة بال Dataset فتتغير لكل طالب بدون أي مشاكل . مع انني عندما أختار طالب من ال Combobox تتغير جميع القيم بما فيها حقول ال Parameters
أرجوا ان تكون المشكلة واضحة
ودمتم بخير
ملاحظة : هذا الكود لا يعمل إلا بعد تثبيت الملحق iTextSharp وتضمين المكتبات iTextSharp.text و iTextSharp.text.pdf
كود :
Private Sub PrintAll_Click(sender As Object, e As EventArgs)
Me.Cursor = Cursors.WaitCursor
Me.DataSet1.DataTable1.Clear()
Me.DataTable1TableAdapter.Fill(Me.DataSet1.DataTable1)
Dim outputFile As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "AllStudents.pdf")
Dim document As New Document
Dim pdfCopy As PdfCopy = New PdfCopy(document, New FileStream(outputFile, FileMode.Create))
document.Open()
Dim customersCopy As DataSet1.DataTable1DataTable = DataSet1.DataTable1.Copy()
For Each row As DataRow In customersCopy.Rows
Me.DataTable1TableAdapter.Search_ID(Me.DataSet1.DataTable1, row("ID").ToString())
Me.ReportViewer1.RefreshReport()
Dim pdfRenderBytes As Byte() = ReportViewer1.LocalReport.Render("PDF")
Dim reader As New PdfReader(pdfRenderBytes)
For i As Integer = 1 To reader.NumberOfPages
pdfCopy.AddPage(pdfCopy.GetImportedPage(reader, i))
Next
reader.Close()
Next
document.Close()
Process.Start(outputFile)
Me.Cursor = Cursors.Default
End Sub
(09-02-23, 09:40 PM)Taha Okla كتب : السلام عليكم ورحمة الله وبركاته
--
بشكل عام التقارير تتكون من ثلاث مناطق :
- الترويسة (ترويسة بأول صفحة من التقرير وترويسة لكل صفحة).
- التذييل (تذييل لكل صفحة وتذييل بخر صفحة للتقرير).
- عرض التقرير (وهي المنطقة ما بين الترويسة والتذييل).
أي بيانات تضعها ضمن الترويسة أو التذييل سيأخذها التقرير مرة واحدة وسوف تتكرر.
وأي بيانات تضعها ضمن عرض التقرير فلن تتكرر ، وسيتم سردها بحسب جملة الاستعلام التي زودت بها التقرير.
المشكلة التي تتحدث عنها توضح أن هناك خطأ بتصميم التقرير،،
مما سبق يعني : عليك أن تجعل البيانات التي لا تريد تكرارها ضمن عرض التقرير وليس في( الترويسة والتذييل).
--
أحببت أن ألفت انتباهك لهذه النقطة،،
فهذا ما أعرفه وربما غيري يستطيع افادتك أكثر مني..
أعتذر أني لم أستطع أن أفيدك أكثر من ذلك.
--
طريقة آخرى للحل :
تصور أنك تبني قالب ضمن داتاتيبل .. تضع فيه كل البيانات التي تريدها لكل طالب ضمن سطر(سجل) واحد.، ثم الطالب الذي يليه ضمن السجل الثاني.
وتجعل هذا الجدول الافتراضي مصدراً لهذا التقرير، سيكون عندها الأمر أبسط..
هل توصلت للحل؟؟؟
|