C# ile PDF Oluşturma (Örnek fatura uygulaması)
Tags: createpdfsoftware, pdf, csharp, dotnet
Published: 2020-12-26 10:30:13

---
title: C# ile PDF Oluşturma (Örnek fatura uygulaması)
published: true
date: 2020-06-08 23:32:02 UTC
tags: createpdfsoftware,pdf,csharpprogramming,dotnet
canonical_url: 
---

![](https://cdn-images-1.medium.com/max/627/0*lxLvVeFkj856bt0d.jpg)

Merhabalar bu yazımda günlük hayatta olmazsa olmazlar arasında bulunan PDF’leri, C# ile Server side Handlebars template engine kullanarak nasıl oluşturabileceğimizden bahsedeceğim.

**Doğrudan örnek projeyi incelemek için** [**GitHub linki.**](https://github.com/hakanyalitekin/SampleCreatePDF)

Kullanım alanları olarak gerek fatura, irsaliye gerek blog sitelerimize ekleyeceğimiz CV’lerde kullananabileceğimiz örnekler yapmak mümkün.

Burada ben, günümüzde çok daha yaygın olan Web Servis ile örnek uygulama yapacağım fakat aynı kodlar ile ister .Net Core ister .Net Framework 4.5+ fark etmeksizin tüm platformlar için kullanabilirsiniz. Yani aynı kodları Console’a da WinForm’a da dahil edebilirsiniz.

C# ile PDF oluşturmak için iki adet NuGet paketi ve bir adet Html şablonu gereksinimimiz olacak;

**1-** [**https://www.nuget.org/packages/Select.HtmlToPdf**](https://www.nuget.org/packages/Select.HtmlToPdf)  
**2-** [**https://www.nuget.org/packages/Handlebars.Net**](https://www.nuget.org/packages/Handlebars.Net) **(Template Engine )  
3- Örnek şablona yukarıda ki**[**github linkinden**](https://github.com/hakanyalitekin/SampleCreatePDF/blob/master/SampleCreatePDF/PDF_Template.html)**erişilebilir.**

Ben PDF ile ilgili 5 sayfaya kadar ücretsiz olan SelectPDF’i kullandım fakat siz ihtiyaçlarınıza göre [**bu link**](https://www.it-swarm.dev/tr/c%23/htmlyi-.nette-pdfye-donusturun/958245890/) üzerindeki tartışmaya göz atarak farklı bir package kullanabilirsiniz. (Eğer SelectPDF’i kullanacaksanız dahi bir göz atmanızda fayda var)

Kodlamaya geçmeden önce template engine’lerin çalışma mantığından kısaca bahsedeyim. Template engine’leri Html input’ların yer tutucularına(placeholder) benzetmek mümkündür. Yaptığı iş örneğin Html içerisinde `{{isim}}` gördüğü yeri göndereceğimiz isim değeri ile yer değiştirmesidir. Handlebars’ın yeteneklerine [**bu link**](https://handlebarsjs.com/guide/) üzerinden erişebilirsiniz. Ben basit expression ve each yeteneklerinden faydalanacağım.

Html içerisinden küçük bir örnek gösterim;

![](https://cdn-images-1.medium.com/max/953/1*xvnIVGadBkRvmMNVQJmFWQ.png)

Gelelim kod kısmına. Öncelikle bir PdfManager oluşturuyoruz ve içerisine SelectPDF ile ilgili kısmı yazıyoruz.

> _Ben portrait bir A4 kağıdı üzerinden gittim fakat siz farklı ihtiyaçlarınıza göre farklı kağıt seçenekleri ekleyebilirsiniz. PdfPageSize enum’u üzerinden kağıt seçeneklerini görebilirsiniz._

{% gist https://gist.github.com/hakanyalitekin/1e4d88f7341c0db75c4054322286cd7b %}

Atrık Pdf oluşturma metodumuz olduğuna göre template engine’imizi kullanarak **Html - Model** birleştirme işlemini gerçekleştirebiliriz. Fakat bu birleştirme işleminine geçmeden önce Handlebars’ın nimetlerinden biraz daha faydalanmak istiyorum. Para ve tarih formatların da küçük ayarlamalar yapan metodumu yazıyorum. _(Ben tarih formatını açıklayacağım bunu anladığınızda para formatını da anlamış olacaksınız.)_

Öncelikle metodumuzda kullandığımız parameters’in değerlerini html içerisinde önceden ayarlıyoruz ve ekran görüntüsünün aşağıdaki gibi olduğundan emin oluyoruz.

![](https://cdn-images-1.medium.com/max/586/1*pENpq8yn4vXUeBz76msf6Q.png)

Ve sonrasında metodumuzu yazıyoruz. Bu metot ile ilgili önemli ayrıntıları yorum satırı olarak ekledim fakat tekrar bahsedeyim.

Neden ikinci parametre olarak tarih formatını aldık, elle yazsak olmaz mıydı?

Kesinlikle olurdu. Fakat birden fazla format kullanılmak istendiğinde bunu nasıl çözeceğinizi göstermek istedim.

{% gist https://gist.github.com/hakanyalitekin/d679d67dc9111fb45e15acee538f5aee %}

PdfManager sınıfımız hazır olduğuna göre şimdi kullanma aşamasına geçelim. Tüm detaylarını yorum satırı olarak ekledim, tek tek burada yeniden bahsedip gereksiz yere vaktinizi almayacağım :)

{% gist https://gist.github.com/hakanyalitekin/cbaae3af95446987730ba0b4cb3d7faa %}

localhost:(port)/api/home/CreatePdf’ü tetikleyerek pdf’in oluşup oluşmadığını test edebilirsiniz. Örnek görüntü aşağıdaki gibi olmalıdır.

![](https://cdn-images-1.medium.com/max/925/1*c4I2HDUBOKr33DhhjCt-kQ.png)

Umarım ufakta olsa faydam dokunmuştur.