Merhaba arkadaşlar bugün sizlere sharepoint ortamında girilen bir içeriği ya da html türünde bir yazıyı PDF formatına dönüştürerek o uzantı da nasıl kaydedeceğimizden bahsedeceğim.
NOT:
Bu yöntem ile dosya kodun çalıştığı sunucu da verilen konuma indirilmektedir. Eğer dosyayı son kullanıcı tarafında indirilebilir olması isteniyorsa
SharePoint WebPart ile Html Formatındaki Yazıyı PDF Formatına Dönüştürerek Tarayıcı Üzerinden İndirmek
yazımı inceleyebilir.
İlk olarak projemizi oluşturuyoruz.
Projeye sağ tıklayarak
“Manage NuGet Packages…”
diyerek nuget paketlerinin yönetim ekranını açıyoruz. Burada arama kısmında
“NReco.PdfGenerator”
yazarak aratıyoruz ve çıkan nuget paketini kuruyoruz.
Bu kurulumdan sonra aşağıdaki proje linkinde yer alan proje içerisindeki
“App_Data”
klasörünü alarak IIS te
“VirtualDirectories”
altındaki site klasörünün içine kopyalıyoruz.
Ya da bu konuma giderek
“App_Data”
klasörü oluşturarak içine de
“wkhtmltopdf”
adında bir klasör oluşturup sadece
“wkhtmltopdf.exe”
programını bu klasörün içerisine ekleyebilirsiniz. Geriye kalan Dll dosyalarını ilk çalışmada otamatik indirebilmesi ve hata vermeden çalışması için
“App_Data”
klasörüne tam yetki vermeniz gerekmektedir. Eğer Dll dosyaları yüklendi ise ve bulunuyorsa klasörde sadece yetki okuması olması da yeterki olacaktır.
Daha sonra webpartımızın ascx tarafına geliyoruz. Burada kullanıcı arayüzünden almak istediğiniz kısımları oluşturabilirsiniz. Ben kullanıcıdan pdf dosyasının adını ve pdf içine eklenecek içeriği almak istedim.
Save File Name : <asp:TextBox ID="tbFileName" runat="server"></asp:TextBox> <br />
Html Content : <asp:TextBox ID="tbPdfContent" runat="server" TextMode="MultiLine" Rows="6"></asp:TextBox> <br />
<asp:Button ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click" />
Save
File
Name
:
<
asp
:
TextBox
ID
=
"tbFileName"
runat
=
"server"
>
<
/
asp
:
TextBox
>
<
br
/
>
Html
Content
:
<
asp
:
TextBox
ID
=
"tbPdfContent"
runat
=
"server"
TextMode
=
"MultiLine"
Rows
=
"6"
>
<
/
asp
:
TextBox
>
<
br
/
>
<
asp
:
Button
ID
=
"btnSave"
runat
=
"server"
Text
=
"Save"
OnClick
=
"btnSave_Click"
/
>
protected void btnSave_Click(object sender, EventArgs e)
SPSecurity.RunWithElevatedPrivileges(delegate ()
string htmlStart = "<html><head><meta http-equiv='content-type' content='text/html; charset=UTF-8'></head><body>";
string htmlContent = tbPdfContent.Text;
string htmlFinish = "</body></html>";
string htmlPath = @"C:\pdf\";
string htmlName = (string.IsNullOrEmpty(tbFileName.Text) ? "yunusemrearac" : tbFileName.Text) + ".pdf";
string htmlSavePath = htmlPath + htmlName;
string html = htmlStart + htmlContent + htmlFinish;
var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
htmlToPdf.GeneratePdf(html, "", htmlSavePath);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected
void
btnSave_Click
(
object
sender
,
EventArgs
e
)
{
SPSecurity
.
RunWithElevatedPrivileges
(
delegate
(
)
{
string
htmlStart
=
"<html><head><meta http-equiv='content-type' content='text/html; charset=UTF-8'></head><body>"
;
string
htmlContent
=
tbPdfContent
.
Text
;
string
htmlFinish
=
"</body></html>"
;
string
htmlPath
=
@"C:\pdf\"
;
string
htmlName
=
(
string
.
IsNullOrEmpty
(
tbFileName
.
Text
)
?
"yunusemrearac"
:
tbFileName
.
Text
)
+
".pdf"
;
string
htmlSavePath
=
htmlPath
+
htmlName
;
string
html
=
htmlStart
+
htmlContent
+
htmlFinish
;
var
htmlToPdf
=
new
NReco
.
PdfGenerator
.
HtmlToPdfConverter
(
)
;
htmlToPdf
.
GeneratePdf
(
html
,
""
,
htmlSavePath
)
;
}
)
;
}
Burada butona basıldığında tetikleme işlemi olacağı için kodumuzu botun click event içine yazıyoruz. Yukarıdaki kodu açıklayacak olursak.
Sharepoint tarafında kullanıcının IIS tarafına attığımız exe dosyasını kullanması ve pdf dosyamızı kaydedebilmesi için sistemin
RunWithElevatedPrivileges
olarak çalışması gerekmektedir.
htmlStart
değişkenimizde pdf verimizde kullanacağımız head taglarını ekledik. Ben sadece türkçe karakter desteği olması için UTF-8 meta tagını ekledim.
htmlContent
değişkenine ise pdf te yer almasını istediğimiz içerik gelmesi gerekmektedir. Bu kısımda ben içeriği kullanıcıdan aldığım için field değer atamasını bu değişkenimize yaptık.
hmlFinish
değişkeni ise htmlStart değişkeninde açtığımız tagların kapanması ve sonradan eklenmek istenen tagların yer alacağı değişkenimiz olacaktır.
htmlPath
değişkenine ise oluşturulacak olan pdf dosyasının nereye kaydedileceğini tanımladığımız path bilgisinin olduğu değişken değerimiz. Burada verilecek konum exe dosyasının çalışacağı sunucu da olması gereken bir konum olması gerekmektedir.
htmlName
değişkeni ise pdf dosyamızın ismini belirleyeceğimiz değişkendir. Bu değeri de ben son kullanıcıdan almaktayım ama boş girme ihtimaline karşı eğer boş değer gelirse kendim bir isim ataması da yapmış oldum. Burada gelecek ismin sonuna
“.pdf”
şeklinde dosya uzantısını eklemeyi unutmayın.
htmlSavePath
değişkeni pdf dosyamızın kaydedileceği lokasyon ve dosya isminin birleştiği değişkendir.
html
değişkeni ise htmlStart, htmlContent ve htmlFinish değişkenlerinin birleştiği değişkenimizdir.
Bütün bu tanımlamalarımızı yaptıktan sonra
“new NReco.PdfGenerator.HtmlToPdfConverter()”
şeklinde türettiğimiz ve
“NReco.PdfGenerator.HtmlToPdfConverter”
tipinde
“htmlToPdf”
adında bir değişken tanımlıyoruz.
Bu değişkenimizde yer alan
“GeneratePdf”
metodumuza html ve kayıt konumunu yollayarak kodumuzu tamamlıyoruz.
Bahsedilen adımları sorunsuz uyguladığınız zaman yukarıdaki gibi bir ekran gelecektir. Ben örnek bir data girişi yaparak
“Save”
butonuna basıyoruz.
Kod kısmında verdiğimiz konuma gittiğimizde belirlediğimiz dosya adında bir pdf oluştuğunu görmekteyiz.
Dosyamızı da açtığımız zaman yukarıdaki gibi istediğimiz şekilde pdf dosyamızın oluştuğunu görmekteyiz.
Örnek projenin tamamını ve kullanıcağınız exe dosyası ve dll leri aşağıdaki github adresinden alabilirsiniz.
Önceki Yazı
SharePoint Sitesine Custom Breadcrumb Navigation Webpart Yapımı
Sonraki Yazı
C# Kullanarak Html Formatındaki Text Değişkenindeki Html Taglarını Çıkartarak sadece Yazı Kısmının Alınması
İlk Yorumu Siz Yapın