Merhabalar, C# DataGridView PDF Oluşturma – Dışa Aktarma dersim ile C# eğitim setime devam ediyorum. Bu dersimde C# DataGridView’i PDF olarak dışa aktarma işlemini anlatmaya çalışacağım. Daha önceleri Excel olarak dışa aktarmayı anlatmıştım. Bu pdf olarak dışa aktarma işleminde DataGridView’deki verileri hücre hücre dışa aktarmayı göreceğiz.
C# DataGridView PDF Oluşturma – Dışa Aktarma
C€ DataGeidView PDF Dışa aktarma işlemini foreach döngüleri ile hücreleri gezerek bir tablo oluşturup, bu tabloyu pdf dosyası olarak kaydetme işlemine bakacağız. Burada vereceğim kodlar verileri basit bir tablo görüntüsü olarak dışa aktarmaktadır. Amaç sadece PDF olarak dışa aktarmak olduğundan özelleştirme yapılamamaktadır.
Bu işlemi yapabilmek için aşağıdaki namespaceleri ekliyoruz.
using iTextSharp.text; using iTextSharp.text.pdf;
Yukarıdakş namespaceleri projemize ekleyebilmemiz için ilgili kütüphanenin NUGET üzerinden indirilmesi ve kurulması gerekmektedir. Bu işlem için Solution Explorer kısmından projemizin üzerine sağ tık yapıyoruz ve Manage Nuget Packages diyoruz. Açılan ekranda Browse kısmına gelerek arama kutusuna iTextSharp yazarak ilk sırada çıkan kütüphaneyi indirip kuruyoruz.
C# iTextSharp kütüphanesi ekli olmadan yukarıdaki namespaceleri’de ekleyemeyiz.
C# DataGridView PDF Oluşturma
Şimdi kodlarımızı yazmaya geçebiliriz.
Dışa aktarma işlemini yaparken, SaveFileDialog nesnesini de kullanacağız. Bu sayede dışa aktarılacak PDF dosyasının nereye ve hangi adla kaydetmek istiyorsak seçebileceğiz. Bu kodları pek bilmediğim için anlatabileceğim çok fazla şey yok. Kopyalayıp yapıştırın ve kullanın. :)
public static void PDF_Disa_Aktar(DataGridView dataGridView1) { SaveFileDialog save = new SaveFileDialog(); save.OverwritePrompt = false; save.Title = "PDF Dosyaları"; save.DefaultExt = "pdf"; save.Filter = "PDF Dosyaları (*.pdf)|*.pdf|Tüm Dosyalar(*.*)|*.*"; if (save.ShowDialog() == DialogResult.OK) { PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount); // Bu alanlarla oynarak tasarımı iyileştirebilirsiniz. pdfTable.DefaultCell.Padding = 3; // hücre duvarı ve veri arasında mesafe pdfTable.WidthPercentage = 80; // hücre genişliği pdfTable.HorizontalAlignment = Element.ALIGN_LEFT; // yazı hizalaması pdfTable.DefaultCell.BorderWidth = 1; // kenarlık kalınlığı // Bu alanlarla oynarak tasarımı iyileştirebilirsiniz. foreach (DataGridViewColumn column in dataGridView1.Columns) { PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText)); cell.BackgroundColor = new iTextSharp.text.BaseColor(240, 240, 240); // hücre arka plan rengi pdfTable.AddCell(cell); } try { foreach (DataGridViewRow row in dataGridView1.Rows) { foreach (DataGridViewCell cell in row.Cells) { pdfTable.AddCell(cell.Value.ToString()); } } } catch (NullReferenceException) { } using (FileStream stream = new FileStream(save.FileName + ".pdf", FileMode.Create)) { Document pdfDoc = new Document(PageSize.A2, 10f, 10f, 10f, 0f);// sayfa boyutu. PdfWriter.GetInstance(pdfDoc, stream); pdfDoc.Open(); pdfDoc.Add(pdfTable); pdfDoc.Close(); stream.Close(); } } }
Yukarıda “//Bu alanlarla oynarak tasarımı iyileştirebilirsiniz.” olarak ayırdığım kısım tablonun genişliği, veri ile hücre duvarı arasındaki pixel mesafesi ve kenarlıkların kalınlığı gibi görsel değişikler yapabilirsiniz. Ölçüler ile oynayarak istediğiniz görüntüye yakın bir şeyler elde edebilirsiniz.
SaveFileDialog kullanmak istemiyorsanız, ilgili kodları silerek;
using (FileStream stream = new FileStream(save.FileName + ".pdf", FileMode.Create))
satırındaki “save.FileName” kısmına direk yolu ve adı yazabilirsiniz.
Bir Class İle Kullanmak
Bu metodu olduğu gibi bir Class içerisine alabilirsiniz. İlk satırda gördüğünüz gibi bu metod DataGridView nesnesi alan bir parametreye sahip. Bu kodlara bir class dosyası içerisine aldıktan sonra aşağıdaki gibi tek satır olarak kullanabilirsiniz.
DısaAktarmalar.PDF_Disa_Aktar(dataGridView1);
Burada bu kodlarımı eklediğim class’ımın adı DısaAktarmalar ‘dır.
C# DataGridView PDF Oluşturma – Dışa Aktarma dersimizde bu kadardı arkadaşlar. Diğer derslerimizde görüşmek üzere…
Arkadaşlar sağ tarafa Facebook sayfamın feed kutusunu ekledim. Oradan sayfamı beğenerek bana destek olabilirsiniz. Teşekkürler.
Ek bir DLL gerektirdiğinden bu dersi Github projeme eklemiş olsam da çalışmayacaktı bu sebeple eklemedim.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Sağlıcakla ve takipte kalın.
Hocam emeğinize sağlık. Datagridviewde belirli kolanların pdf aktarılması sağlamak font size gibi ayarlar ile datagridi pdf ye kayıt ederken pdf sayfasının yatay olması gibi durumları nasıl düzenleyebiliriz.
Merhaba, Teşekkürler.
O konuları hiç araştırmadım. Özel bir tasarım şekline ihtiyaç duyuyorsanız artık raporlama uygulamalarına geçmelisiniz. Crystal Report, Stimulsoft vs uygulamalar bunlara örnektir.
Cevabınız için teşekkür ederim hocam.
Hocam çok güzel istediğimiz şekilde pdf oluyor tek sorun datagridviewde resim var fakat resimleri System.Drawing.
Bitmap diye yazı halinde gösteriyor bunu nasıl düzeltebiliriz?
Merhaba,
O konuyu ayrıca araştırmanız gerekiyor. O konu hakkında daha önce hiçbir işlem yapmamıştım.