PDA

View Full Version : آموزش: خروجی Gridview به PDF



MasoudAdmin
جمعه 31 شهریور 1402, 12:27 عصر
با سلام خدمت همه
من یک GridView دارم که فونت ها همه فارسی هستند. چند تا نمونه کد خروجی جدول به pdf رو دارم ولی هیچ کدوم واسه فونت فارسی کار نمیکنه:متفکر::ناراحت:
چجوری باید این مشکل رو رفع کنم.
این یه نمونه کدم هست:

using iTextSharp.text;
using iTextSharp.text.html.simpleparser;
using iTextSharp.text.pdf;

private void ExportGridToPDF()
{
PdfPTable pdfPTable = new PdfPTable(this.dgvCheckListForExport.HeaderRow.Cel ls.Count);
foreach(TableCell headrerCell in dgvCheckListForExport.HeaderRow.Cells)
{
iTextSharp.text.Font font = new iTextSharp.text.Font();
font.Color = new BaseColor(this.dgvCheckListForExport.HeaderStyle.F oreColor);
PdfPCell pdfCell = new PdfPCell(new Phrase(headrerCell.Text, font));
pdfCell.BackgroundColor = new BaseColor(this.dgvCheckListForExport.HeaderStyle.B ackColor);
pdfPTable.AddCell(pdfCell);
}
foreach (GridViewRow gridViewRow in dgvCheckListForExport.Rows)
{
foreach(TableCell tableCell in gridViewRow.Cells)
{
iTextSharp.text.Font font = new iTextSharp.text.Font();
font.Color = new BaseColor(this.dgvCheckListForExport.RowStyle.Fore Color);
PdfPCell pdfCell = new PdfPCell(new Phrase(tableCell.Text, font));
pdfCell.BackgroundColor = new BaseColor(this.dgvCheckListForExport.RowStyle.Back Color);
pdfPTable.AddCell(pdfCell);
}
}
Document pdfDocument = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
PdfWriter.GetInstance(pdfDocument, Response.OutputStream);
pdfDocument.Open();
pdfDocument.Add(pdfPTable);
pdfDocument.Close();
Response.ContentType = "application/pdf";
Response.AppendHeader("content-disposition", "attachment;filename=CheckList"+this.lbCode.Text.Trim()+".pdf");
Response.Write(pdfDocument);
Response.Flush();
Response.End();
}


که خروجیش وقتی pdf میشه هیچی رو نمایش نمیده. تصویر زیر
154942


اینم نمونه کد دوم:


Response.ClearContent();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=MyPdfFile.pdf");
Response.Cache.SetCacheability(HttpCacheability.No Cache);
StringWriter strWrite = new StringWriter();
HtmlTextWriter htmWrite = new HtmlTextWriter(strWrite);
HtmlForm frm = new HtmlForm();
dgvCheckListForExport.Parent.Controls.Add(frm);
frm.Attributes["runat"] = "server";
frm.Controls.Add(dgvCheckListForExport);
frm.RenderControl(htmWrite);
StringReader sr = new StringReader(strWrite.ToString());
Document pdfDoc = new Document(PageSize.A4, 8f, 8f, 8f, 2f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.Flush();
Response.End();

اینم نمونه تصویر خروجی pdf کد بالا
154943

خیلی جستجو کردم که چجوری این document که حالت pdf ساخته میشه از راست به چپ باشه و utf8 هم باشه. ولی چیزی دستگیرم نشد.
خیلی سر این موضوع درگیر شدم و وقتم رو گرفته.
ممنون میشم اگر دوستان تجربه ای در این خصوص دارند راهنمایی و کمک کنند
با سپاس

mazoolagh
جمعه 31 شهریور 1402, 21:20 عصر
سلام و روز خوش

1- شاید ایراد از فونت ها باشه (مثل فونت های سری B که واقعا زباله ان!)
با فونت های استاندارد مثل tahoma , arial , ... تست کنین.

2- مطمئن بشین که آیا فقط با فارسی مشکل داره یا کلا با غیرانگلیسی کار نمیکنه (سیریلیک و ... رو تست کنین)

3- پرسش ها رو با تگ "آموزش" مشخص نکنین.
گمراه کننده است!
آموزش معنیش این هست که شما قرار هست چیزی آموزش بدین نه این که آموزش ببینین!

MasoudAdmin
شنبه 01 مهر 1402, 12:12 عصر
سلام. بابت تگ چشم. این دفعه رعایت میشه.
نه فونت هم از tahoma استفاده کردم. حتی فونت arial هم کردم. بازم فرقی نکرد.
بله. همین کد رو یه پروژه جدید ایجاد کردم و تستی جدول رو انگلیسی پر کردم اوکی هست. ولی با فونت فارسی مشکل داره.
ببخشید منظورتون از سیریلیک چی هست؟

mazoolagh
شنبه 01 مهر 1402, 18:40 عصر
سلام دوباره
منظور از سیریلیک خط کشورهای مثل روسیه و ... هست که خودش زیرمجموعه یونیکد حساب میشه.
بعضی وقتها پیش میاد که کمپوننت ها با کارآکترهای فارسی/عربی مشکل دارن ولی با زیرمجموعه های دیگه نه (مثل همین سیریلیک، یا فرانسه، آلمانی، اسپانیایی و ...)
بعضی وقتها هم کلا با غیرانگلیسی مشکل دارن.

اسم کتابخانه هایی که تست کردین رو بدین - من هم سر فرصت تست میکنم.

یک جستجو هم همینجا انجام بدین. احتمال داره که پیشتر هم مطرح شده باشه.

MasoudAdmin
شنبه 01 مهر 1402, 20:13 عصر
با سلام
از NuGet مورد iTextSharp رو روی پروژه نصب کردم. واسه خروجی به pdf از این کتابخانه استفاده کردم.
جدولم هم که خود GridView خود دات نت هست.

MasoudAdmin
شنبه 01 مهر 1402, 21:37 عصر
سلام دوباره
منظور از سیریلیک خط کشورهای مثل روسیه و ... هست که خودش زیرمجموعه یونیکد حساب میشه.
بعضی وقتها پیش میاد که کمپوننت ها با کارآکترهای فارسی/عربی مشکل دارن ولی با زیرمجموعه های دیگه نه (مثل همین سیریلیک، یا فرانسه، آلمانی، اسپانیایی و ...)
بعضی وقتها هم کلا با غیرانگلیسی مشکل دارن.

اسم کتابخانه هایی که تست کردین رو بدین - من هم سر فرصت تست میکنم.

یک جستجو هم همینجا انجام بدین. احتمال داره که پیشتر هم مطرح شده باشه.

سلام مجدد
با جستجو اون کد اولی رو یه خورده اصلاح کردم

private void ExportGridToPDF()
{
PdfPTable pdfTable = new PdfPTable(this.dgvCheckListForExport.HeaderRow.Cel ls.Count);
pdfTable.RunDirection = PdfWriter.RUN_DIRECTION_RTL;
pdfTable.HorizontalAlignment = Element.ALIGN_CENTER;
pdfTable.WidthPercentage = 100;
var fontPath = Environment.CurrentDirectory + "\\fonts\\BNaznnBd.ttf";
var fontBase = BaseFont.CreateFont(fontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
var font = new iTextSharp.text.Font(fontBase, 10);
iTextSharp.text.Font Text = new iTextSharp.text.Font(fontBase, 10, iTextSharp.text.Font.NORMAL);
foreach (TableCell headrerCell in dgvCheckListForExport.HeaderRow.Cells)
{
font.Color = new BaseColor(this.dgvCheckListForExport.HeaderStyle.F oreColor);
PdfPCell pdfCell = new PdfPCell(new Phrase(headrerCell.Text, font));
pdfCell.HorizontalAlignment = Element.ALIGN_CENTER;
pdfCell.VerticalAlignment = Element.ALIGN_CENTER;
pdfCell.BackgroundColor = new BaseColor(this.dgvCheckListForExport.HeaderStyle.B ackColor);
pdfTable.AddCell(pdfCell);
}
foreach (GridViewRow gridViewRow in dgvCheckListForExport.Rows)
{
foreach(TableCell tableCell in gridViewRow.Cells)
{
font.Color = new BaseColor(this.dgvCheckListForExport.RowStyle.Fore Color);
PdfPCell pdfCell = new PdfPCell(new Phrase(tableCell.Text, font));
pdfCell.HorizontalAlignment = Element.ALIGN_CENTER;
pdfCell.VerticalAlignment = Element.ALIGN_CENTER;
pdfCell.BackgroundColor = new BaseColor(this.dgvCheckListForExport.RowStyle.Back Color);
pdfTable.AddCell(pdfCell);
}
}
Document pdfDocument = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
PdfWriter.GetInstance(pdfDocument, Response.OutputStream);
pdfDocument.Open();
pdfDocument.Add(pdfTable);
pdfDocument.Close();
Response.ContentType = "application/pdf";
Response.AppendHeader("content-disposition", "attachment;filename=CheckListNosaziCode"+this.lbCode.Text.Trim()+".pdf");
Response.Write(pdfDocument);
Response.Flush();
Response.End();
}

جالبه pdf میشه ولی سفید هست(طبق تصویر اولی). ولی وقتی همون pdf رو تبدیل به word می کنم اطلاعات رو نمایش میده همه چی هم درسته و فونت و سایر موارد!!:متفکر::افسرده:

mazoolagh
دوشنبه 03 مهر 1402, 17:09 عصر
امروز یک کم با این کتابخانه کار کردم.
چند مورد هست که مطرح میکنم و امیدوارم مفید باشه.

1- کتابخانه iTextSharp دیگه کنار گذاشته شده و deprecated هست:
154959

بنابراین باید از کتابخانه itext7 استفاده کنین:
154960

2- با توجه به اون چه که در این کتابخانه دیدم (تجربه چند ساعته البته)،
بعید میدونم که کدهای ورژن قبلی هم به درستی متن فارسی رو رندر کرده باشن.
من روی کتابخانه قدیمی وقت نگذاشتم،
ولی اگر روی ورژن قدیمی کدی پیدا کردین که واقعا کار میکنه، همون رو استفاده کنین.

3- در حالت عادی، متن فارسی نمایش داده میشه ولی اشتباه رندر میشه:
گل پژمرده پامچال 154962

4- برای این که متن فارسی درست رندر بشه (راست به چپ و چسباندن حروف)،
باید یک کتابخانه دیگه به اسم pdfcalligraph استفاده کنین که رایگان نیست!
154963
5- با افزودن این کتابخانه مشکل نمایش درست متن فارسی (تا حد زیادی) رفع میشه:
154964
ولی همینجور که دیده میشه ایرادهایی هم داره که بخشی از اون به فونت برمیگرده و یکسان نیست.

6- برای مقایسه و تصمیم گیری، کد نمونه و خروجی اون رو برای هر دو حالت زیر در پست های بعدی میگذارم:
- بدون کتابخانه pdfcalligraph
- با استفاده از کتابخانه pdfcalligraph (باید خریداری بشه)

mazoolagh
دوشنبه 03 مهر 1402, 17:24 عصر
using System;
using System.Windows.Forms;
using iText.Kernel.Pdf;
using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

private static string PDF_File = "D:\\demo_BN576172.pdf";
private static string Fonts_Dir = Application.StartupPath.Replace("bin\\Debug", "Fonts");
private string[] fonts = {
"tahoma",
"calibri",
"arial",
"segoeui",
"intelone-mono-font-family-regular",
"NotoNaskhArabic-Regular",
"Vazirmatn-Regular",
"ircompset",
"bcompset",
"IranNastaliq",
"IranNastaliqP" };
private static string Persian_Text = "گل پژمرده پامچال";
private static string English_Text = "Sample Text";
private static string German_Text = "Fußgängerübergänge";
private static string Greek_Text = "Δείγμα κειμένου";
private static string Symbol_Text = "∞∫∑∏∆∂↔↕∩≈℧℗☺♣";

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(PDF_File));
Document doc = new Document(pdfDoc,PageSize.A4.Rotate());
doc.SetMargins(10, 10, 10, 10);
Style Pstyle = new Style(); // Persian Style
Pstyle.SetFontSize(12);
Pstyle.SetFontScript(iText.Commons.Utils.UnicodeSc ript.ARABIC);
Pstyle.SetBaseDirection(BaseDirection.RIGHT_TO_LEF T);
Pstyle.SetVerticalAlignment(VerticalAlignment.MIDD LE);
Pstyle.SetTextAlignment(TextAlignment.RIGHT);


Style Estyle = new Style(); // English Style
Estyle.SetFontSize(12);
Estyle.SetVerticalAlignment(VerticalAlignment.MIDD LE);
Estyle.SetTextAlignment(TextAlignment.LEFT);


Style Header = new Style().SetBold().SetTextAlignment(TextAlignment.C ENTER);
Table pdfTable = new Table(new float[6]).UseAllAvailableWidth();
pdfTable.AddCell(new Paragraph("Font").AddStyle(Header));
pdfTable.AddCell(new Paragraph("Persian").AddStyle(Header));
pdfTable.AddCell(new Paragraph("English").AddStyle(Header));
pdfTable.AddCell(new Paragraph("German").AddStyle(Header));
pdfTable.AddCell(new Paragraph("Greek").AddStyle(Header));
pdfTable.AddCell(new Paragraph("Symbol").AddStyle(Header));


for (int i = 0; i < fonts.Length; i++)
{
PdfFont fnt = PdfFontFactory.CreateFont($"{Fonts_Dir}{fonts[i]}.ttf");
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(fonts[i])));
pdfTable.AddCell(new Cell().AddStyle(Pstyle).Add(new Paragraph(Persian_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(English_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(German_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(Greek_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(Symbol_Text).SetFont(fnt)));
}
doc.Add(pdfTable);
doc.Close();

mazoolagh
دوشنبه 03 مهر 1402, 17:31 عصر
خروجی کد پست 8:
154965

فایل pdf ساخته شده نیز پیوست میشود.

mazoolagh
دوشنبه 03 مهر 1402, 18:07 عصر
برای استفاده از pdfcalligraph لازم نیست در کد تغییری بدیم،
کافی هست اول برنامه فایل لایسنس رو لود کنیم.

برای کامل بودن نمونه، کد این بخش رو با vb.net میگذارم.
از نظر عملکرد دقیقا مشابه کد پست 8 هست با این تفاوت که:
1 - کد بارگذاری لایسنس اضافه شده
2- فونت bcompset حذف شده چون باعث خطا میشه (وقتی میگم فونت های سری b زباله خالصن دقیقا همینه)

Imports iText.Layout
Imports iText.Kernel.Pdf
Imports iText.Kernel.Font
Imports iText.Layout.Element
Imports iText.Layout.Properties
Imports iText.Kernel.Geom

Const PDF_File = "D:\\demo_BN576172_calligraph.pdf"
Private Fonts_Dir As String = Application.StartupPath.Replace("bin\Debug", "Fonts")
Private fonts As String() = {
"tahoma",
"calibri",
"arial",
"segoeui",
"intelone-mono-font-family-regular",
"NotoNaskhArabic-Regular",
"Vazirmatn-Regular",
"ircompset",
"IranNastaliq",
"IranNastaliqP"}
Const Persian_Text = "گل پژمرده پامچال"
Const English_Text = "Sample Text"
Const German_Text = "Fußgängerübergänge"
Const Greek_Text = "Δείγμα κειμένου"
Const Symbol_Text = "∞∫∑∏∆∂↔↕∩≈℧℗☺♣"

iText.Licensing.Base.LicenseKey.LoadLicenseFile(Ne w IO.FileInfo("x.json"))

Dim pdfDoc As PdfDocument = New PdfDocument(New PdfWriter(PDF_File))
Dim doc As Document = New Document(pdfDoc, PageSize.A4.Rotate())
doc.SetMargins(10, 10, 10, 10)
Dim Pstyle As Style = New Style()
Pstyle.SetFontSize(12)
Pstyle.SetFontScript(iText.Commons.Utils.UnicodeSc ript.ARABIC)
Pstyle.SetBaseDirection(BaseDirection.RIGHT_TO_LEF T)
Pstyle.SetVerticalAlignment(VerticalAlignment.MIDD LE)
Pstyle.SetTextAlignment(TextAlignment.RIGHT)
Dim Estyle As Style = New Style()
Estyle.SetFontSize(12)
Estyle.SetVerticalAlignment(VerticalAlignment.MIDD LE)
Estyle.SetTextAlignment(TextAlignment.LEFT)
Dim Header As Style = New Style().SetBold().SetTextAlignment(TextAlignment.C ENTER)
Dim pdfTable As Table = New Table(New Single(5) {}).UseAllAvailableWidth()
pdfTable.AddCell(New Paragraph("Font").AddStyle(Header))
pdfTable.AddCell(New Paragraph("Persian").AddStyle(Header))
pdfTable.AddCell(New Paragraph("English").AddStyle(Header))
pdfTable.AddCell(New Paragraph("German").AddStyle(Header))
pdfTable.AddCell(New Paragraph("Greek").AddStyle(Header))
pdfTable.AddCell(New Paragraph("Symbol").AddStyle(Header))


For i As Integer = 0 To fonts.Length - 1
Dim fnt As PdfFont = PdfFontFactory.CreateFont($"{Fonts_Dir}{fonts(i)}.ttf")
pdfTable.AddCell(New Cell().AddStyle(Estyle).Add(New Paragraph(fonts(i))))
pdfTable.AddCell(New Cell().AddStyle(Pstyle).Add(New Paragraph(Persian_Text).SetFont(fnt)))
pdfTable.AddCell(New Cell().AddStyle(Estyle).Add(New Paragraph(English_Text).SetFont(fnt)))
pdfTable.AddCell(New Cell().AddStyle(Estyle).Add(New Paragraph(German_Text).SetFont(fnt)))
pdfTable.AddCell(New Cell().AddStyle(Estyle).Add(New Paragraph(Greek_Text).SetFont(fnt)))
pdfTable.AddCell(New Cell().AddStyle(Estyle).Add(New Paragraph(Symbol_Text).SetFont(fnt)))
Next

doc.Add(pdfTable)
doc.Close()

mazoolagh
دوشنبه 03 مهر 1402, 18:12 عصر
خروجی کد پست 10:
154967

فایل pdf

mazoolagh
دوشنبه 03 مهر 1402, 18:28 عصر
ادامه موارد پست 7:

7- همینجور که دیده میشه، این کتابخانه در رندر بعضی فونتها در حالتهای خاص مشکل (جزئی) داره.
همچنین در بعضی فونت ها بعضی از زیرمجموعه های یونیکد پیاده نشده.
بنابراین فونت باید با توجه به نوع محتوای دیتا انتخاب بشه.
فونت arial چون حروف چسبیده وسط و اول کلمه یک شکل هستن کمترین اشکال رو داره.

8- بنظر میاد این کتابخانه، با وجود امکانات خیلی زیاد، یک کتابخانه low-level هست.
یعنی برای هر کار ساده ای باید کد بنویسین. متدی برای نوشتن یک کنترل پیچیده مثل gridview یا datagridview نداره (تا اونجا که چک کردم).
در واقع باید یک جدول بسازین و دیتا رو از یک دیتاسورس یا گرید یکی یکی بخونین و در این جدول بنویسین.
تعریف style هم وقت گیر هست (رنگ، سایز، چیدن افقی-عمودی، ایتالیک و پررنگ و ...)
اگر قرار باشه دقیقا شکل گرید رو بسازین کدنویسی خیلی سخت و وقت گیر هست - شاید اگر به image تبدیل کنین و در pdf بنویسین راحتتر باشه.

MasoudAdmin
سه شنبه 04 مهر 1402, 22:30 عصر
using System;
using System.Windows.Forms;
using iText.Kernel.Pdf;
using iText.Kernel.Font;
using iText.Kernel.Geom;
using iText.Layout;
using iText.Layout.Element;
using iText.Layout.Properties;

private static string PDF_File = "D:\\demo_BN576172.pdf";
private static string Fonts_Dir = Application.StartupPath.Replace("bin\\Debug", "Fonts");
private string[] fonts = {
"tahoma",
"calibri",
"arial",
"segoeui",
"intelone-mono-font-family-regular",
"NotoNaskhArabic-Regular",
"Vazirmatn-Regular",
"ircompset",
"bcompset",
"IranNastaliq",
"IranNastaliqP" };
private static string Persian_Text = "گل پژمرده پامچال";
private static string English_Text = "Sample Text";
private static string German_Text = "Fußgängerübergänge";
private static string Greek_Text = "Δείγμα κειμένου";
private static string Symbol_Text = "∞∫∑∏∆∂↔↕∩≈℧℗☺♣";

PdfDocument pdfDoc = new PdfDocument(new PdfWriter(PDF_File));
Document doc = new Document(pdfDoc,PageSize.A4.Rotate());
doc.SetMargins(10, 10, 10, 10);
Style Pstyle = new Style(); // Persian Style
Pstyle.SetFontSize(12);
Pstyle.SetFontScript(iText.Commons.Utils.UnicodeSc ript.ARABIC);
Pstyle.SetBaseDirection(BaseDirection.RIGHT_TO_LEF T);
Pstyle.SetVerticalAlignment(VerticalAlignment.MIDD LE);
Pstyle.SetTextAlignment(TextAlignment.RIGHT);


Style Estyle = new Style(); // English Style
Estyle.SetFontSize(12);
Estyle.SetVerticalAlignment(VerticalAlignment.MIDD LE);
Estyle.SetTextAlignment(TextAlignment.LEFT);


Style Header = new Style().SetBold().SetTextAlignment(TextAlignment.C ENTER);
Table pdfTable = new Table(new float[6]).UseAllAvailableWidth();
pdfTable.AddCell(new Paragraph("Font").AddStyle(Header));
pdfTable.AddCell(new Paragraph("Persian").AddStyle(Header));
pdfTable.AddCell(new Paragraph("English").AddStyle(Header));
pdfTable.AddCell(new Paragraph("German").AddStyle(Header));
pdfTable.AddCell(new Paragraph("Greek").AddStyle(Header));
pdfTable.AddCell(new Paragraph("Symbol").AddStyle(Header));


for (int i = 0; i < fonts.Length; i++)
{
PdfFont fnt = PdfFontFactory.CreateFont($"{Fonts_Dir}{fonts[i]}.ttf");
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(fonts[i])));
pdfTable.AddCell(new Cell().AddStyle(Pstyle).Add(new Paragraph(Persian_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(English_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(German_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(Greek_Text).SetFont(fnt)));
pdfTable.AddCell(new Cell().AddStyle(Estyle).Add(new Paragraph(Symbol_Text).SetFont(fnt)));
}
doc.Add(pdfTable);
doc.Close();


واقعا سپاس از وقتی که گذاشتید. ممنون:تشویق:

MasoudAdmin
سه شنبه 04 مهر 1402, 22:31 عصر
ادامه موارد پست 7:

7- همینجور که دیده میشه، این کتابخانه در رندر بعضی فونتها در حالتهای خاص مشکل (جزئی) داره.
همچنین در بعضی فونت ها بعضی از زیرمجموعه های یونیکد پیاده نشده.
بنابراین فونت باید با توجه به نوع محتوای دیتا انتخاب بشه.
فونت arial چون حروف چسبیده وسط و اول کلمه یک شکل هستن کمترین اشکال رو داره.

8- بنظر میاد این کتابخانه، با وجود امکانات خیلی زیاد، یک کتابخانه low-level هست.
یعنی برای هر کار ساده ای باید کد بنویسین. متدی برای نوشتن یک کنترل پیچیده مثل gridview یا datagridview نداره (تا اونجا که چک کردم).
در واقع باید یک جدول بسازین و دیتا رو از یک دیتاسورس یا گرید یکی یکی بخونین و در این جدول بنویسین.
تعریف style هم وقت گیر هست (رنگ، سایز، چیدن افقی-عمودی، ایتالیک و پررنگ و ...)
اگر قرار باشه دقیقا شکل گرید رو بسازین کدنویسی خیلی سخت و وقت گیر هست - شاید اگر به image تبدیل کنین و در pdf بنویسین راحتتر باشه.


از وقتی که گذاشتید و راهنمایی کردید سپاس.:لبخندساده: