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.
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", "[email protected]");
dt.Rows.Add(2, "Ahmet", "istanbul", "[email protected]");
dt.Rows.Add(3, "Mehmet", "ankara", "[email protected]");
dt.Rows.Add(4, "Arif", "izmir", "[email protected]");
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.