Etiketler

, , ,


Dokümanı PDF e Çevirme / TIF (Çoklu Sayfa) i PDF e Çevirme

Elektronik imza’nın hayatımıza iyice girmeye başlasıyla, bir standart olarak kullanılan PDF dokümanları daha bir kıymetleneceği su götürmez bir gerçektir. Bu amaçla da yaygın olan PDF kullanımı giderek artacaktır. Sizde elinizdeki dokumanları PDF e çevirme ihtiyacı hissedeceğiniz günler yakındır.

Dokümanları PDF e çeviren birçok ürün yerli ve yabancı piyasada çokça vardır. Elinizdeki dokümanın kalitesine göre bir çoğu PDF e çevirdiğinde dökümanızı optimize ederek, temizleyerek, sıkıştırarak hatta aranabilir(searchable) hale getirmektedir. Çünkü iş sadece PDF e çevirmek değildir. Kullanılabilirliğini artırmak da bu işin esaslarındadır.

Bu yazımda size elinizdeki dokümanları PDF e çeviren açık kaynak (Open Source) kodlu bir projeden bahsedeceğim. “PDFSharp” sayesinde birçok dokümanızı PDF e çevirebilirsiniz yada kendiniz PDF hazırlayabilirsiniz.

Hazır birçok kütüphanesi bulunan PDFSharp’ı http://sourceforge.net/projects/pdfsharp/files/ adresinden indirebilir, detaylı incelemeleriniz de http://www.pdfsharp.net/ sitesinden yapabilirsiniz.

Ben sizinle çoklu sayfalardan oluşan bir TIF dokümanını (yada herhangi bir resim dosyasını) PDF e çevirmenizi sağlayan hazırladığım bir fonksiyonu bu yazında paylaşacağım. Hem de çevirdiğiniz TIF dokümanın boyutunu arttırmadan.


 
Kaynak Kodu :

Imports System.IO
Imports ISO.IBS.Utility.Common
Imports IBS.IBSException.HataYonetimi
ImportsISO.IBS.Data.DataAccess.FileSystemAccess.TextFileLog
Imports PdfSharp.Drawing
Namespace FileSystemAccess.TifToPDF.Classes
    Public Class TifToPDFDonusturucu
        Implements Interfaces.ITifToPDFDonusturucu
        ”’

Çoklu sayfaiçeren TIF dokumanlarının tamamını PDF e ekleyen işlevdir.

        ”’ Tif dokümamınıntam adresi
        ”’ Kaydedilecek PDF dokümanın tam adresi
        ”’ İşlemin Başarılı/Başarısız olma sonucu
        Private FunctionTifToPDFDonusturucu(ByVal TifResmininAdresi As String, ByVal KaydedilecekPDFDosyasininAdresi As String) As Boolean Implements Interfaces.ITifToPDFDonusturucu.TifToPDFDonusturucu
            Dim PdfSharpXGR AsPdfSharp.Drawing.XGraphics = Nothing
            Dim PdfeEklenecekResim AsPdfSharp.Drawing.XImage = Nothing
            Dim arananDosya As New FileInfo(TifResmininAdresi)
            Dim arananKlasorMevcutMu AsBoolean = arananDosya.Exists()
            If (arananKlasorMevcutMu) Then
               Dim tif AsDrawing.Image = Drawing.Image.FromFile(TifResmininAdresi) ‘Tif dokumanını alır.
               Dim tifSayfalari As New Drawing.Imaging.FrameDimension(tif.FrameDimensionsList(0))
               Dim sayfaSayisi AsInteger = tif.GetFrameCount(tifSayfalari)
               Dim pdfDosyasi AsNew PdfSharp.Pdf.PdfDocument()
               ‘TIF in tüm sayfalarını PDF’e ekler.
               For tifSayfasi AsInteger = 0 TosayfaSayisi – 1
                   tif.SelectActiveFrame(tifSayfalari, tifSayfasi) ‘TIFiçindeki sayfayı seçer
                   pdfDosyasi.Pages.Add(New PdfSharp.Pdf.PdfPage())‘ PDF dosyasına yeni bir sayfa ekler
                   PdfSharpXGR = PdfSharp.Drawing.XGraphics.FromPdfPage(pdfDosyasi.Pages(tifSayfasi))
                   ‘Hazır kütüphane yardımıyla PDF’e yeni eklenensayfayı alır
                   PdfeEklenecekResim = tif ‘Tif’in eklenecekresmini alır
                   PdfSharpXGR.DrawImage(PdfeEklenecekResim, 0, 0) ‘PDFe alınan Tif i ekler.
               Next
               Dim kaydedilecekKlasorAdresi As String =KaydedilecekPDFDosyasininAdresi.Substring(0,KaydedilecekPDFDosyasininAdresi.LastIndexOf(“\”))
               Dim kaydedilecekKlasor As New DirectoryInfo(kaydedilecekKlasorAdresi)
               Dim klasorMevcutMu As Boolean =kaydedilecekKlasor.Exists()
               If (NotklasorMevcutMu) Then
                   Directory.CreateDirectory(kaydedilecekKlasorAdresi)
               End If
               pdfDosyasi.Save(KaydedilecekPDFDosyasininAdresi) ‘PDF i kaydeder.
               pdfDosyasi.Close()
               Return True
            Else
               Throw NewException(“Arananresim bulunamadı.”)
               Return False
            End If
        End Function
        ”’

Çoklu sayfa içeren TIF dokumanlarının tamamını PDF eekleyen işlevdir.

        ”’ Parametre olarak verilen filigran metnini herbir sayfanınortasına ekler.
        ”’
        ”’ Tif dokümamınıntam adresi
        ”’ Kaydedilecek PDF dokümanın tam adresi
        ”’ filigranMetni
        ”’ İşlemin Başarılı/Başarısız olma sonucu
        Private FunctionTifToPDFDonusturucu(ByVal TifResmininAdresi As String, ByVal KaydedilecekPDFDosyasininAdresi As String, ByRef filigranMetni AsString) As Boolean ImplementsInterfaces.ITifToPDFDonusturucu.TifToPDFDonusturucu
            Dim PdfSharpXGR AsPdfSharp.Drawing.XGraphics = Nothing
            Dim PdfeEklenecekResim AsPdfSharp.Drawing.XImage = Nothing
            Dim arananDosya As New FileInfo(TifResmininAdresi)
            Dim arananKlasorMevcutMu AsBoolean = arananDosya.Exists()
            If (arananKlasorMevcutMu) Then
               Dim tif AsDrawing.Image = Drawing.Image.FromFile(TifResmininAdresi) ‘Tif dokumanını alır.
               Dim tifSayfalari As New Drawing.Imaging.FrameDimension(tif.FrameDimensionsList(0))
               Dim sayfaSayisi AsInteger = tif.GetFrameCount(tifSayfalari)
               Dim pdfDosyasi AsNew PdfSharp.Pdf.PdfDocument()
               ‘TIF in tüm sayfalarını PDF’e ekler.
               For tifSayfasi AsInteger = 0 TosayfaSayisi – 1
                   tif.SelectActiveFrame(tifSayfalari, tifSayfasi) ‘TIFiçindeki sayfayı seçer
                   pdfDosyasi.Pages.Add(New PdfSharp.Pdf.PdfPage()) ‘ PDF dosyasınayeni bir sayfa ekler
                   Dim pdfSayfasi AsPdfSharp.Pdf.PdfPage =pdfDosyasi.Pages(tifSayfasi)
                   PdfSharpXGR = PdfSharp.Drawing.XGraphics.FromPdfPage(pdfSayfasi)
                   ‘Hazır kütüphane yardımıyla PDF’e yeni eklenensayfayı alır
                   PdfeEklenecekResim = tif ‘Tif’in eklenecekresmini alır
                   PdfSharpXGR.DrawImage(PdfeEklenecekResim, 0, 0) ‘PDFe alınan Tif i ekler.
                   Dim yaziSecenekleri As NewPdfSharp.Drawing.XPdfFontOptions(PdfSharp.Pdf.PdfFontEncoding.Unicode)
                   ‘filigran EKLEME
                   Dim font AsNew XFont(“Arial”, 44, XFontStyle.Bold,yaziSecenekleri)
                   Dim filigraninBoyutu As XSize =PdfSharpXGR.MeasureString(filigranMetni, font)
                    PdfSharpXGR.TranslateTransform(pdfSayfasi.Width.Point()/ 2, pdfSayfasi.Height.Point() / 2)
                   PdfSharpXGR.RotateTransform(-Math.Atan(pdfSayfasi.Height.Point()/ pdfSayfasi.Width.Point()) * 180 / Math.PI)
                   PdfSharpXGR.TranslateTransform(-pdfSayfasi.Width.Point() / 2,-pdfSayfasi.Height.Point() / 2)
                   Dim filigraninGorunumBicimi As New XStringFormat()
                   filigraninGorunumBicimi.Alignment = XStringAlignment.Near
                   filigraninGorunumBicimi.LineAlignment = XLineAlignment.Near
                   Dim filigranFircasi As XBrush = New XSolidBrush(XColor.FromKnownColor(XKnownColor.Red))
                   Dim ortaNoktaX AsDouble = (pdfSayfasi.Width.Point() -filigraninBoyutu.Width) / 2 + 30
                   Dim ortaNoktaY AsDouble = (pdfSayfasi.Height.Point() -filigraninBoyutu.Height) / 2
                   Dim ortaNokta AsXPoint = NewXPoint(ortaNoktaX, ortaNoktaY)
                   Dim kalem AsNew XPen(XColor.FromKnownColor(XKnownColor.Red),4)
                   ‘ Draw the string
                   PdfSharpXGR.DrawRectangle(kalem, ortaNoktaX, ortaNoktaY,filigraninBoyutu.Width, filigraninBoyutu.Height)
                    PdfSharpXGR.DrawString(filigranMetni,font, filigranFircasi, ortaNokta, filigraninGorunumBicimi)
                   ‘filigran EKLEME SON
               Next
               Dim kaydedilecekKlasorAdresi As String =KaydedilecekPDFDosyasininAdresi.Substring(0,KaydedilecekPDFDosyasininAdresi.LastIndexOf(“\”))
               Dim kaydedilecekKlasor As New DirectoryInfo(kaydedilecekKlasorAdresi)
               Dim klasorMevcutMu As Boolean =kaydedilecekKlasor.Exists()
               If (NotklasorMevcutMu) Then
                   Directory.CreateDirectory(kaydedilecekKlasorAdresi)
               End If
               pdfDosyasi.Save(KaydedilecekPDFDosyasininAdresi) ‘PDF i kaydeder.
               pdfDosyasi.Close()
               Return True
            Else
               Throw NewException(“Arananresim bulunamadı.”)
               Return False
            End If
        End Function
    End Class
End Namespace

PdfSharp ile PDF e Filigran (Watermark) Ekleme

Önceki yazılarımda, sizi .net ile geliştirilmiş hazır bir kütüphane olan PdfSharp ile tanıştırmıştım. Bu yazımda oluşturduğunuz pdf’lerinize filigran(watermark) eklemeyi size göstereceğim. PdfSharp ile bu oldukça basit bir şekilde gerçekleştirilebilmektedir.

Örnek kodlar aşağıdaki gibidir.

Dim yaziSecenekleri As New PdfSharp.Drawing.XPdfFontOptions(PdfSharp.Pdf.PdfFontEncoding.Unicode)
‘filigran EKLEME
Dim font As New XFont(“Arial”, 44, XFontStyle.Bold,yaziSecenekleri)
Dim filigraninBoyutu As XSize = PdfSharpXGR.MeasureString(filigranMetni,font)
PdfSharpXGR.TranslateTransform(pdfSayfasi.Width.Point()/ 2, pdfSayfasi.Height.Point() / 2)
PdfSharpXGR.RotateTransform(-Math.Atan(pdfSayfasi.Height.Point() /pdfSayfasi.Width.Point()) * 180 / Math.PI)
PdfSharpXGR.TranslateTransform(-pdfSayfasi.Width.Point()/ 2, -pdfSayfasi.Height.Point() / 2)
Dim filigraninGorunumBicimi AsNew XStringFormat()
filigraninGorunumBicimi.Alignment = XStringAlignment.Near
filigraninGorunumBicimi.LineAlignment = XLineAlignment.Near
Dim filigranFircasi As XBrush = New XSolidBrush(XColor.FromKnownColor(XKnownColor.Red))
Dim ortaNoktaX As Double = (pdfSayfasi.Width.Point() -filigraninBoyutu.Width) / 2 + 30
Dim ortaNoktaY As Double = (pdfSayfasi.Height.Point() -filigraninBoyutu.Height) / 2
Dim ortaNokta As XPoint = New XPoint(ortaNoktaX, ortaNoktaY)
Dim kalem As New XPen(XColor.FromKnownColor(XKnownColor.Red),4)
‘ Draw the string
PdfSharpXGR.DrawRectangle(kalem, ortaNoktaX,ortaNoktaY, filigraninBoyutu.Width, filigraninBoyutu.Height)
PdfSharpXGR.DrawString(filigranMetni, font,filigranFircasi, ortaNokta, filigraninGorunumBicimi)
‘filigran EKLEME SON
Yukarıdaki kod bloğunu http://dervisali.blogspot.com/2009/11/net-coklu-sayfa-tif-i-pdf-e-cevirme.html adresinden indirebileceğiniz kod bloğu içersinde eklemeniz yeterli olacaktır.
Reklamlar