Merhabalar arkadaslar,bu hafta basında bir programımız için(Resim İşleme)PDF dosyalarını bir resim formatına(PNG)çevirip üzerinde işlem yapmamız gerekti.İnternet üzerinde bu konuyla ilgili araştırmalar yapsamda ya sonuç ornek uygulamalarda bi eksiklik veya ücretli DLL sonucuna vardı.Sonunda GhostScript le tanıştım.Kullanımı hiçde zor olmayan bu açık kaynak kodlu projeyi yeni bir proje yaparak size anlatmaya çalışıcam.
İlk olarak GhostScript ister Dll versiyonunu projenize entegre edip kullanabilirsiniz yada benim gibi CMD projesine parametreler gondererek sonuca ulaşırsınız.
Projemize GSCMD.rar (6,13 mb) ekledikten sonra sıra geldi işimizi görücek kodlara;
string query = "-q -sDEVICE=pngmono -DeviceCMYK -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -dBATCH -dNOPAUSE -dFirstPage=" + i + " -dLastPage=" + i + " -r200 -sOutputFile=" + cikar + "\\Sayfa" + i + ".png" + " " + yol + "";
Process cmdAc = new Process();
cmdAc.StartInfo.FileName = ghostunYolu;
cmdAc.StartInfo.Arguments = query; //cmd nin argumanı
cmdAc.StartInfo.CreateNoWindow = true;
cmdAc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//ghostscript in penceresi açılsınmı?
cmdAc.Start();
cmdAc.WaitForExit();
Burada query degiskeninde GhostScript in kullandıgı parametleri goruyoruz.Biraz bunlardan bahsedicek olursak
-sDEVICE //Export edilecek resim türü
-DeviceCMYK -dGraphicsAlphaBits=4 -dTextAlphaBits=4 //Resim Özellikleri
-dBATCH -dNOPAUSE -dFirstPage=" + i + " -dLastPage=" + i + " //burada durmadan bu sayfadan buraya kadar ama sole bir hatırlatmada bulunmak istiyorum ilk ve son sayfaya aralık verdigimde kabul etmedi bende PDF in sayfa sayısını bulup 1e1 sayfa numarasını yazdırıp export yaptım.
-r200 //Burada resimin DPI degeri istediginiz gibi oynayabilirsiniz fakat artırdıgınızda işlemleri yavaşlatıcagını gözardı etmemek gerekli.
-sOutputFile //buradaki ilk parametre çıkarılacak yer ve dosya adı ikinci alandada PDF in bulundugu yer ve adı.
Tabiki daha deminde bahsettigim gibi bir PDF sayfa numarası nasıl alınır?
FileStream fs = new FileStream(yol, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs);
string pdf = sr.ReadToEnd();
Regex rx = new Regex(@"/Type\s/Page[^s]");//burada bi aksilik çıkmazsa sayfa numarasını ogreniyoruz
MatchCollection match = rx.Matches(pdf);//!!Dikkat!! her pdf veya bilgisayarda diyelim sayfa numarası gelimeyebiliyor ona gore ayarlamanızı yaparsınız
sayfaSayisi = match.Count.ToString();//Ornegin sayfa sayısı yoksa 10 default deger sonuncuda sıkıntı yoksa +10 gibi gibi

Programımız bu şekilde, siz istediginiz gibi geliştirebilirsiniz DPI ayarı kalite resim gibi gibi size kalmış 
Programın Projesine Buradan
cevirPDF.rar (6,24 mb)
Ulaşabilirsiniz.