Anasayfa » DataTable’dan PDF Oluşturma | C# Windows Form

Share This Post

.NET / C# / Yazılım

DataTable’dan PDF Oluşturma | C# Windows Form

Merhabalar;
Windows Form Application projemizde herhangi bir veri kaynağından beslenen DataTable‘da ki verilerin nasıl PDF‘e aktarılacağını bu yazıda anlatacağım.

Hazır proje dosyalarına Github adresimden ulaşabilirsiniz.

Öncelikle Windows Form Application projesi oluşturarak, ExcelDataReader ve ExcelDataReader.DataSet Nuget paketlerini projemize dahil ediyoruz.

Daha sonra DataTable oluşturarak içerisine dataları giriyoruz, bunu herhangi bir database kaynağından da çekiyor olabilirsiniz, ben manuel olarak dataları oluşturdum.

Sponsor
private void BindDataGridView()
        {
            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[4] { new DataColumn("Id", typeof(int)),
            new DataColumn("İsim", typeof(string)),
            new DataColumn("Şehir", typeof(string)),
            new DataColumn("E-Mail",typeof(string)) });
            dt.Rows.Add(1, "Ali UYSAL", "tokat", "test@ali.com");
            dt.Rows.Add(2, "Ahmet", "istanbul", "test@ahmet.com");
            dt.Rows.Add(3, "Mehmet", "ankara", "test@mehmet.com");
            dt.Rows.Add(4, "Arif", "izmir", "test@arif.com");
            this.dataGridView1.DataSource = dt;
        }

DataTable’ı formumuza ekleyelim

public Form1()
        {
            InitializeComponent();
            this.BindDataGridView();
        }

Şimdi formumuz da bir buton oluşturarak Button_click içerisine aşağıdaki kodları yazalım.

private void Button1_Click(object sender, EventArgs e)
        {
            iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);
            PdfPTable pdfTable = new PdfPTable(dataGridView1.ColumnCount);
            pdfTable.DefaultCell.Padding = 3;
            pdfTable.WidthPercentage = 30;
            pdfTable.HorizontalAlignment = Element.ALIGN_LEFT;
            pdfTable.DefaultCell.BorderWidth = 1;

            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                PdfPCell cell = new PdfPCell(new Phrase(column.HeaderText, fontNormal));
                pdfTable.AddCell(cell);
            }

            int row = dataGridView1.Rows.Count;
            int cell2 = dataGridView1.Rows[1].Cells.Count;
            for (int i = 0; i < row - 1; i++)
            {
                for (int j = 0; j < cell2; j++)
                {
                    if (dataGridView1.Rows[i].Cells[j].Value == null)
                    {

                        dataGridView1.Rows[i].Cells[j].Value = "null";
                    }
                    pdfTable.AddCell(dataGridView1.Rows[i].Cells[j].Value.ToString());
                    

                }
            }


            //PDF'e Aktar
            string folderPath = @"C:\pdf\";

            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }
            using (FileStream stream = new FileStream(folderPath + "DataGrid.pdf", FileMode.Create))
            {
                Document pdfDoc = new Document(PageSize.A2, 10f, 10f, 10f, 0f);
                PdfWriter.GetInstance(pdfDoc, stream);
                pdfDoc.Open();
                pdfDoc.Add(pdfTable);
                pdfDoc.Close();
                stream.Close();
            }
            MessageBox.Show("PDF Oluşturuldu " + folderPath);
        }

Buton işlevine eklediğimiz aşağıdaki kod pdf dönüşümünde Türkçe karakter sorununun önüne geçmemizi sağlıyor.

iTextSharp.text.pdf.BaseFont STF_Helvetica_Turkish = iTextSharp.text.pdf.BaseFont.CreateFont("Helvetica", "CP1254", iTextSharp.text.pdf.BaseFont.NOT_EMBEDDED);
            iTextSharp.text.Font fontNormal = new iTextSharp.text.Font(STF_Helvetica_Turkish, 12, iTextSharp.text.Font.NORMAL);

PDF dosyamızın oluşturulacağı dizin ve dosya isimlerini değiştirmek için aşağıdaki satırlarda düzenleme yapabilirsiniz.

string folderPath = @"C:\pdf\";

using (FileStream stream = new FileStream(folderPath + "DataGrid.pdf", FileMode.Create))

PDF dosyamız oluşturulduğun da bir mesaj kutusu gösteriyoruz, içerisinde “PDF Oluşturuldu” ve oluşturulduğu dizin yazmakta.

MessageBox.Show("PDF Oluşturuldu " + folderPath);

Uygulamayı çalıştırarak PDF Oluştur butonuna bastığımız da herhangi bir sorun yoksa mesaj kutusu PDF Oluştu bildiriminde bulunacaktır, ilgili klasörden PDF dosyanızı kontrol edebilirsiniz.

Burada yaptığımız proje kodlarına Github sayfamdan ulaşabilirsiniz.

Share This Post

IT alanında 16 sene önce donanım ile başlayan tecrübem, network ve sonrasında iş analizi, yazılım geliştirme ve proje yöneticiliği alanlarında devam etmiştir. Endüstriyel yazılımlar, sahadan veri toplama ve analizleri, otomatik etiketleme ve barkod sistemleri, otomatik tartım ve robotik konularında tecrübe sahibiyim. Sanayi 4.0 kapsamında imalat sanayinin dijital dönüşümünde çok fazla projenin hayata geçmesini sağladım. Open Source projelerle uzun süre ilgilendim, analiz ve implementasyonu konularında tecrübe edindim. Bunlar dışında hobi amacıyla başlasam da sonradan ürüne dönüşen, geliştirme kartları ile farklı çalışmalarım olmuştur. Raspberry Pi üzerinde yaptığım donanımsal ve yazılımsal işler ile çok farklı ürünler ortaya çıkartarak tecrübe edindim.

Leave a Reply