نقل قول: خروجی Gridview به PDF
سلام و روز خوش
1- شاید ایراد از فونت ها باشه (مثل فونت های سری B که واقعا زباله ان!)
با فونت های استاندارد مثل tahoma , arial , ... تست کنین.
2- مطمئن بشین که آیا فقط با فارسی مشکل داره یا کلا با غیرانگلیسی کار نمیکنه (سیریلیک و ... رو تست کنین)
3- پرسش ها رو با تگ "آموزش" مشخص نکنین.
گمراه کننده است!
آموزش معنیش این هست که شما قرار هست چیزی آموزش بدین نه این که آموزش ببینین!
نقل قول: خروجی Gridview به PDF
سلام. بابت تگ چشم. این دفعه رعایت میشه.
نه فونت هم از tahoma استفاده کردم. حتی فونت arial هم کردم. بازم فرقی نکرد.
بله. همین کد رو یه پروژه جدید ایجاد کردم و تستی جدول رو انگلیسی پر کردم اوکی هست. ولی با فونت فارسی مشکل داره.
ببخشید منظورتون از سیریلیک چی هست؟
نقل قول: خروجی Gridview به PDF
سلام دوباره
منظور از سیریلیک خط کشورهای مثل روسیه و ... هست که خودش زیرمجموعه یونیکد حساب میشه.
بعضی وقتها پیش میاد که کمپوننت ها با کارآکترهای فارسی/عربی مشکل دارن ولی با زیرمجموعه های دیگه نه (مثل همین سیریلیک، یا فرانسه، آلمانی، اسپانیایی و ...)
بعضی وقتها هم کلا با غیرانگلیسی مشکل دارن.
اسم کتابخانه هایی که تست کردین رو بدین - من هم سر فرصت تست میکنم.
یک جستجو هم همینجا انجام بدین. احتمال داره که پیشتر هم مطرح شده باشه.
نقل قول: خروجی Gridview به PDF
با سلام
از NuGet مورد iTextSharp رو روی پروژه نصب کردم. واسه خروجی به pdf از این کتابخانه استفاده کردم.
جدولم هم که خود GridView خود دات نت هست.
نقل قول: خروجی Gridview به PDF
نقل قول:
نوشته شده توسط
mazoolagh
سلام دوباره
منظور از سیریلیک خط کشورهای مثل روسیه و ... هست که خودش زیرمجموعه یونیکد حساب میشه.
بعضی وقتها پیش میاد که کمپوننت ها با کارآکترهای فارسی/عربی مشکل دارن ولی با زیرمجموعه های دیگه نه (مثل همین سیریلیک، یا فرانسه، آلمانی، اسپانیایی و ...)
بعضی وقتها هم کلا با غیرانگلیسی مشکل دارن.
اسم کتابخانه هایی که تست کردین رو بدین - من هم سر فرصت تست میکنم.
یک جستجو هم همینجا انجام بدین. احتمال داره که پیشتر هم مطرح شده باشه.
سلام مجدد
با جستجو اون کد اولی رو یه خورده اصلاح کردم
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.lbC ode.Text.Trim()+".pdf");
Response.Write(pdfDocument);
Response.Flush();
Response.End();
}
جالبه pdf میشه ولی سفید هست(طبق تصویر اولی). ولی وقتی همون pdf رو تبدیل به word می کنم اطلاعات رو نمایش میده همه چی هم درسته و فونت و سایر موارد!!:متفکر::افسرده:
5 ضمیمه
Create Persian PDF using itext7
امروز یک کم با این کتابخانه کار کردم.
چند مورد هست که مطرح میکنم و امیدوارم مفید باشه.
1- کتابخانه iTextSharp دیگه کنار گذاشته شده و deprecated هست:
ضمیمه 154959
بنابراین باید از کتابخانه itext7 استفاده کنین:
ضمیمه 154960
2- با توجه به اون چه که در این کتابخانه دیدم (تجربه چند ساعته البته)،
بعید میدونم که کدهای ورژن قبلی هم به درستی متن فارسی رو رندر کرده باشن.
من روی کتابخانه قدیمی وقت نگذاشتم،
ولی اگر روی ورژن قدیمی کدی پیدا کردین که واقعا کار میکنه، همون رو استفاده کنین.
3- در حالت عادی، متن فارسی نمایش داده میشه ولی اشتباه رندر میشه:
گل پژمرده پامچال ضمیمه 154962
4- برای این که متن فارسی درست رندر بشه (راست به چپ و چسباندن حروف)،
باید یک کتابخانه دیگه به اسم pdfcalligraph استفاده کنین که رایگان نیست!
ضمیمه 154963
5- با افزودن این کتابخانه مشکل نمایش درست متن فارسی (تا حد زیادی) رفع میشه:
ضمیمه 154964
ولی همینجور که دیده میشه ایرادهایی هم داره که بخشی از اون به فونت برمیگرده و یکسان نیست.
6- برای مقایسه و تصمیم گیری، کد نمونه و خروجی اون رو برای هر دو حالت زیر در پست های بعدی میگذارم:
- بدون کتابخانه pdfcalligraph
- با استفاده از کتابخانه pdfcalligraph (باید خریداری بشه)
Create Persian PDF using itext7
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();
2 ضمیمه
Create Persian PDF using itext7
خروجی کد پست 8:
ضمیمه 154965
فایل pdf ساخته شده نیز پیوست میشود.
Create Persian PDF using itext7
برای استفاده از 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()
2 ضمیمه
Create Persian PDF using itext7
خروجی کد پست 10:
ضمیمه 154967
فایل pdf
نقل قول: خروجی Gridview به PDF
ادامه موارد پست 7:
7- همینجور که دیده میشه، این کتابخانه در رندر بعضی فونتها در حالتهای خاص مشکل (جزئی) داره.
همچنین در بعضی فونت ها بعضی از زیرمجموعه های یونیکد پیاده نشده.
بنابراین فونت باید با توجه به نوع محتوای دیتا انتخاب بشه.
فونت arial چون حروف چسبیده وسط و اول کلمه یک شکل هستن کمترین اشکال رو داره.
8- بنظر میاد این کتابخانه، با وجود امکانات خیلی زیاد، یک کتابخانه low-level هست.
یعنی برای هر کار ساده ای باید کد بنویسین. متدی برای نوشتن یک کنترل پیچیده مثل gridview یا datagridview نداره (تا اونجا که چک کردم).
در واقع باید یک جدول بسازین و دیتا رو از یک دیتاسورس یا گرید یکی یکی بخونین و در این جدول بنویسین.
تعریف style هم وقت گیر هست (رنگ، سایز، چیدن افقی-عمودی، ایتالیک و پررنگ و ...)
اگر قرار باشه دقیقا شکل گرید رو بسازین کدنویسی خیلی سخت و وقت گیر هست - شاید اگر به image تبدیل کنین و در pdf بنویسین راحتتر باشه.
نقل قول: Create Persian PDF using itext7
نقل قول:
نوشته شده توسط
mazoolagh
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();
واقعا سپاس از وقتی که گذاشتید. ممنون:تشویق:
نقل قول: خروجی Gridview به PDF
نقل قول:
نوشته شده توسط
mazoolagh
ادامه موارد پست 7:
7- همینجور که دیده میشه، این کتابخانه در رندر بعضی فونتها در حالتهای خاص مشکل (جزئی) داره.
همچنین در بعضی فونت ها بعضی از زیرمجموعه های یونیکد پیاده نشده.
بنابراین فونت باید با توجه به نوع محتوای دیتا انتخاب بشه.
فونت arial چون حروف چسبیده وسط و اول کلمه یک شکل هستن کمترین اشکال رو داره.
8- بنظر میاد این کتابخانه، با وجود امکانات خیلی زیاد، یک کتابخانه low-level هست.
یعنی برای هر کار ساده ای باید کد بنویسین. متدی برای نوشتن یک کنترل پیچیده مثل gridview یا datagridview نداره (تا اونجا که چک کردم).
در واقع باید یک جدول بسازین و دیتا رو از یک دیتاسورس یا گرید یکی یکی بخونین و در این جدول بنویسین.
تعریف style هم وقت گیر هست (رنگ، سایز، چیدن افقی-عمودی، ایتالیک و پررنگ و ...)
اگر قرار باشه دقیقا شکل گرید رو بسازین کدنویسی خیلی سخت و وقت گیر هست - شاید اگر به image تبدیل کنین و در pdf بنویسین راحتتر باشه.
از وقتی که گذاشتید و راهنمایی کردید سپاس.:لبخندساده: