ASP.NET MVC ITEXTSHARP KULLANARAK PDF SAYFALARI DİNAMİK OLARAK DÜZENLEME
Pdf dosyasına yazılacak verilerin koordinatlarını bir tabloda tutarak aşağıdaki şekilde ItextSharp kullanarak gerçekleştirdik.
public string PdfFormIslem(int id, int formId)
{
//form bilgilerini getir
//formda kullanılacak alan bilgilerini getir
//personel bilgilerini getir
string olusanDosyaYolVeAd = String.Empty;
//form bilgilerini getir
var veriForm = Islem.Form.Bilgi(formId);
//form bilgisi varsa
if (veriForm != null)
{
try
{
string kullanilacakFormAd = veriForm.FormAd;
string kullanilacakDosyaAd = veriForm.DosyaAd;
string kullanilacakYol = Server.MapPath("/Upload/Form/");
string[] diziDosyaAd = veriForm.DosyaAd.Split('.');
string kullanilacakYeniKayitAd = diziDosyaAd[0];
//personel bilgilerini getir
var veriPersonel = Islem.Personel.Bilgi(id);
string personelAdSoyad = veriPersonel.Ad + " " + veriPersonel.Soyad; // "TAMER YİĞİT";
string personelAdSoyadKadin = veriPersonel.Ad + " " + veriPersonel.Soyad + " " + veriPersonel.IlkSoyad; // "TAMER YİĞİT";
string duzenlemisPersonelAdSoyad = Helpers.Araclar.TurkceKarakterDuzenle(personelAdSoyad);
kullanilacakYeniKayitAd += "_" + duzenlemisPersonelAdSoyad + ".pdf";
olusanDosyaYolVeAd = kullanilacakYol + kullanilacakYeniKayitAd;
// oku
PdfReader reader = new PdfReader(kullanilacakYol + kullanilacakDosyaAd);
int pdfSayfaSayisi = reader.NumberOfPages; //pdf toplam kaç sayfadan oluşuyor
Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
// yaz
FileStream fs = new FileStream(kullanilacakYol + kullanilacakYeniKayitAd, FileMode.Create, FileAccess.Write);
PdfWriter writer = PdfWriter.GetInstance(document, fs);
document.Open();
//sayfa sayısı kadar dön
for (int s = 1; s <= pdfSayfaSayisi; s++)
{
document.NewPage(); //yeni sayfa oluşmasını sağladık
Rectangle size = reader.GetPageSizeWithRotation(s);
// pdf content
PdfContentByte cb = writer.DirectContent;
// font ayarları
string ARIALUNI_TFF = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "Arial.ttf");
BaseFont bf = BaseFont.CreateFont(ARIALUNI_TFF, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
cb.SetColorFill(BaseColor.BLACK);
cb.SetFontAndSize(bf, 9);
// verileri yaz
int baslangicKoordinatX = 0;
int baslangicKoordinatY = 792;
var veriFormData = Islem.FormData.Listele(formId, s);
//form dataları varsa
if (veriFormData != null)
{
//formda kullanılacak data sayısı kadar dön
for (int i = 0; i < veriFormData.Count; i++)
{
var formDataAd = veriFormData[i].DataAd;
float formDataKoordinatX = Convert.ToUInt32(veriFormData[i].KoordinatX);
float formDataKoordinatY = Convert.ToInt32(veriFormData[i].KoordinatY);
var cekilecekData = veriPersonel.GetType().GetProperties().Single(p => p.Name == formDataAd);
var yazilacakData = cekilecekData.GetValue(veriPersonel);
if (yazilacakData != null)
{
cb.BeginText();
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, yazilacakData.ToString(), baslangicKoordinatX + formDataKoordinatX, baslangicKoordinatY - formDataKoordinatY, 0);
cb.EndText();
}
}
}
// pdf oluştur
PdfImportedPage page = writer.GetImportedPage(reader, s);
cb.AddTemplate(page, 0, 0);
}
// kapat
document.Close();
//fs.Flush();
fs.Close();
writer.Close();
reader.Close();
return olusanDosyaYolVeAd;
}
catch (Exception ex)
{
return ex.Message;
}
}
return olusanDosyaYolVeAd;
}