Makale Özeti

Bu makalemizde ASP.Net ile PDF dosya oluşturmadan söz edeceğiz. PDF dosyasının oluşturulması ve düzenlenmesi için açık kaynak kodlu iTextSharp sınıfını kullanacağız.

Makale

Bu makalemizde ASP.Net ile PDF dosya oluşturmadan söz edeceğiz. PDF dosyasının oluşturulması ve düzenlenmesi için açık kaynak kodlu iTextSharp sınıfını kullanacağız. Aşağıdaki adresten ulaşabilirsiniz.
http://sourceforge.net/projects/itextsharp/

Öncelikle temel olarak basit bir örnek oluşturacağız, sonrasında her nesne için detaylı kullanımları göreceğiz.


//Document class'ı temel PDF dosyamızın temelini içeriyor.
//PageSize ile dosya boyutunu belirtebiliyoruz. Bunun yerine Rectangle da kullanabiliriz.
iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);
//MemoryStream Response'a binary olarak gönderip, çıktıyı üretmemizi sağlayacak olan Class'ımız.
MemoryStream output = new MemoryStream();
//PdfWriter PDF dosyamız ile stream'i eşitleyen class'ımız.
iTextSharp.text.pdf.PdfWriter.GetInstance(doc, output);
//Dosya işlemleri öncesinde değişiklikler için Open() methodunu çağırıyoruz.
doc.Open();
//Add() methodu ile en basit anlamda bir metni PDF dosyamızın içerisine ekliyoruz.
doc.Add(new iTextSharp.text.Paragraph("Deneme..."));
//Dosya işlemlerinin bittiğini belirtmek için Close() methodunu çağırıyoruz.
doc.Close();
//Ekran çıktısını temizliyoruz.
Response.Clear();
//Dosya ismini belirtiyoruz.
Response.AddHeader("content-disposition", "attachment;filename=Export.pdf");
//Dosya tipini PDF olarak belirtiyoruz.
Response.ContentType = "application/pdf";
//Dosyanın içeriğini Response içerisine aktarıyoruz.
Response.BinaryWrite(output.ToArray());
//Son aşama da işlemleri bitirip, ekran çıktısına ulaşıyoruz.
Response.End();


Document

Bu sınıf temel olarak PDF dosyamızı temsil ediyor. Daha sonradan göreceğimiz içerik bilgilerinin tutulduğu Paragraph, Image, PdfTable vs. gibi nesneleri içerisinde barındırır. Author, Creator, Keywords, Subject Title vs. gibi dosyaya özel bilgileri de tutar.

//Author bilgisi eklemek için kullanılır.
doc.AddAuthor("Gökhan BAĞCI");
//Title bilgisi eklemek için kullanılır.
doc.AddTitle("ASP.Net ile PDF Dosyası Oluşturmak");
//Subject bilgisi eklemek için kullanılır.
doc.AddSubject("... [Özel içeriğimiz] ...");

//Standart kağıt ölçüleri için PageSize kullanabilirsiniz.
iTextSharp.text.Document doc = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4);
//Özel olarak boyut vermek istersek Rectangle kullanabiliriz.
iTextSharp.text.Document doc = new iTextSharp.text.Document(new iTextSharp.text.Rectangle(800, 200));


Font & Color

Bu kısımda belirteceğimiz Font ve Color System.Drawing altında nesneler değil. iTextSharp’ın kendine özel Font ve Color sınıflarını kullanmak zorundayız.

//Bu kısımda FontFamily altındaki standart fontları kullanabiliyoruz. TIMES_ROMAN, COURIER, HELVETICA gibi...
//9 adet Constructor 'ı bulunuyor. Sırasıyla Font'un adını, boyutunu ve stilini belirtebiliyoruz.
iTextSharp.text.Font normalFont = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.COURIER, 10f, iTextSharp.text.Font.NORMAL);
iTextSharp.text.Font italikFont = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.TIMES_ROMAN, 10f, iTextSharp.text.Font.ITALIC);

//Farklı bir font eklemek istediğimizde aşağıdaki gibi BaseFont sınıfını kullanabiliriz.
iTextSharp.text.Font hariciFont = new iTextSharp.text.Font(iTextSharp.text.pdf.BaseFont.CreateFont(Server.MapPath("MyriadPro-Cond.otf"), iTextSharp.text.pdf.BaseFont.IDENTITY_H, iTextSharp.text.pdf.BaseFont.EMBEDDED));

//Sistemde var olan fontlar içinde FontFactory sınıfı kullanılabilir.
iTextSharp.text.Font tahomaFont = iTextSharp.text.FontFactory.GetFont("Tahoma", 10f);

//SetStyle() Stil eklemek için kullanılır. 0: Normal, 1:Bold, 2:Italic temsil eder.
tahomaFont.SetStyle(1);

//Standart renkler için BaseColor sınıfı kullanılabilir.
iTextSharp.text.BaseColor redColor = iTextSharp.text.BaseColor.RED;
//RGB ve CMYK için değerleri belirterekte renk kullanabiliriz.
iTextSharp.text.BaseColor rgbColor = new iTextSharp.text.BaseColor(000, 019, 127);
iTextSharp.text.BaseColor cmykColor = new iTextSharp.text.BaseColor(000, 019, 127, 50);
//.Net için System.Drawing.Color kullanımı için aşağıdaki örnek kullanılabilir.
iTextSharp.text.BaseColor netColor = new iTextSharp.text.BaseColor(System.Drawing.Color.Navy);


Paragraph

HTML ile karşılaştıracak olursak <p> tag’ine denk geldiğini söyleyebiliriz. Belli sözcük gruplarını içinde tutabilen nesnemizi ifade ediyor. Font, Color, Aligment vs. gibi bilgilerini verebiliyoruz.

iTextSharp.text.Paragraph p = new iTextSharp.text.Paragraph();

//En basit şekliyle Add() methodu ile içerisine string olarak metin belirleyebiliriz.
p.Add("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
//Her hangi bir nesneye font atamak için .Font ile eşleştirme yapabiliriz.
p.Font = tahomaFont;
//Alignment ile hizalama işlemlerini yapabiliriz. 0:Left, 1:Center, 2:Right, 3:Justify
p.Alignment = 3;
//Satır yüksekliği ayarlamak için kullanılır
p.Leading = 12f;
//İlk satırın iç boşluğunu belirtmek için kullanabiliriz.
p.FirstLineIndent = 20;
//IndentationLeft sol taraftan komple boşluk bırakmak için kullanılır. HTML'deki padding ile karşılaştırabiliriz.
p.IndentationLeft = 50;


Image

//Ekleyeceğimiz resmi Image nesnemize atıyoruz.
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("~/Koala.jpg"));
//Boyutlandırma için ScaleToFit() methodunu ya da ScalePercent() methodunu kullanabiliriz.
img.ScaleToFit(200, 100);
//Çerçeve vermek için aşağıdaki özelliklerini kullanabiliriz.
img.Border = iTextSharp.text.Rectangle.BOX;
img.BorderColor = iTextSharp.text.BaseColor.BLACK;
img.BorderWidth = 5f;
//Sonrasında diğer nesnelerdeki gibi Document içine yada Paragraph içerisine ekleyebiliriz.
doc.Add(img);


Chunk
HTML ile karşılaştıracak olursak <span> tagine denk geldiğini söyleyebiliriz.

//Paragraph gibi font belirleyebiliyoruz, buradaki amaç aynı paragraph içindeki farklı font, color vs. değerleri birbirinden ayırabilmek
iTextSharp.text.Chunk c = new iTextSharp.text.Chunk("Deneme mesajı...", italikFont);
p.Add(c);


Bir sonraki makalemiz de PDF içerisinde Tablo, Satır ve Sütunları oluşturmayı göreceğiz.
Başka bir makalede görüşmek dileğiyle…

Gökhan BAĞCI
Web & Mobile Developer

www.itextsharp.com