Merhaba arkadaşlar
Ben Coderx37
Bugün sizlerle basit bir proje olarak görselleri drag&drop yöntemiyle PDF formatına çeviren bir uygulama yapacağız.
Projemizi oluşturmak için Windows Form Application seçelim ve NuGet paketlerinden "PDFsharp" paketini indirelim.
Form ekranı önümüze açılınca bir adet button ve bir adet label koymanız yeterli.
Örnek düzen:
Kodlarımızı yazmaya başlayalım!
Global Alan: Bir lokal alanın dışındaki kalan kapsayıcı uzay alana global alan denir. Bu alanda sadece değişken tanımı ve ataması yapılabilir. Bu alanda tanımlanan değişkenler lokalin aksine ram’de direk yer tutar. Hata ataması yapılmamış bir değişken dahi olsa bile ram’de yer tutabilmesi için C# değişkene otomatik bir değer ataması yaparak ram’de yer tutturur. Böylelikle kodun herhangi bir yerinde kullanılabilir olurlar.
Global alanda kullanıcıdan gelen görselleri tutması adına bir koleksiyon yapısı tanımlayalım.
Form() içerisine de drag ve drop işleminin açılması adına bu kodu ekleyelim.
Şimdi ise buttonumuza çift tıklayıp kodlarımızı yazmaya başlayabiliriz.
Ben Coderx37
Bugün sizlerle basit bir proje olarak görselleri drag&drop yöntemiyle PDF formatına çeviren bir uygulama yapacağız.
Projemizi oluşturmak için Windows Form Application seçelim ve NuGet paketlerinden "PDFsharp" paketini indirelim.
Form ekranı önümüze açılınca bir adet button ve bir adet label koymanız yeterli.
Örnek düzen:
Kodlarımızı yazmaya başlayalım!
Global Alan: Bir lokal alanın dışındaki kalan kapsayıcı uzay alana global alan denir. Bu alanda sadece değişken tanımı ve ataması yapılabilir. Bu alanda tanımlanan değişkenler lokalin aksine ram’de direk yer tutar. Hata ataması yapılmamış bir değişken dahi olsa bile ram’de yer tutabilmesi için C# değişkene otomatik bir değer ataması yaparak ram’de yer tutturur. Böylelikle kodun herhangi bir yerinde kullanılabilir olurlar.
Global alanda kullanıcıdan gelen görselleri tutması adına bir koleksiyon yapısı tanımlayalım.
C#:
private List<Image> images = new List<Image>();
Form() içerisine de drag ve drop işleminin açılması adına bu kodu ekleyelim.
C#:
this.AllowDrop = true;
Şimdi ise buttonumuza çift tıklayıp kodlarımızı yazmaya başlayabiliriz.
C#:
if (images.Count == 0) //koleksiyon yapısındaki görsel sayısı 0 ise kullanıcıyı görsel seçmeye zorla
{
MessageBox.Show("Lütfen en az bir görsel seçin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog(); //dosyaların pdf olarak kaydedileceği yol ve ismi seçmek için dialog ekranı aç
saveFileDialog.Filter = "PDF Files|*.pdf";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
string pdfPath = saveFileDialog.FileName;
using (PdfDocument document = new PdfDocument())
{
foreach (Image image in images) // koleksiyon yapısından gelen resimler boyunca döngüyü döndür
{
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
// görselleri bir a4 sayfası boyutunu geçmeyecek şekilde ayarla
double scaleFactor = Math.Min(page.Width.Point / image.Width, page.Height.Point / image.Height);
double scaledWidth = image.Width * scaleFactor;
double scaledHeight = image.Height * scaleFactor;
double x = (page.Width.Point - scaledWidth) / 2;
double y = (page.Height.Point - scaledHeight) / 2;
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, image.RawFormat);
XImage xImage = XImage.FromStream(ms);
gfx.DrawImage(xImage, x, y, scaledWidth, scaledHeight);
}
}
document.Save(pdfPath);
}
MessageBox.Show("PDF oluşturuldu!");
}
Şimdi formumuza drag ve drop eventlerini eklemek için şu işlemleri yapacağız:
formumuza bir kere sağ tıkladıktan sonra açılan özellikler penceresinden işaretlediğim "olaylar" sekmesini seçiniz.
Buradan DragDrop ve DragEnteri seçelim
Ardından açılan DragEnter kısmına kodlarımızı yazalım
formumuza bir kere sağ tıkladıktan sonra açılan özellikler penceresinden işaretlediğim "olaylar" sekmesini seçiniz.
Buradan DragDrop ve DragEnteri seçelim
Ardından açılan DragEnter kısmına kodlarımızı yazalım
C#:
// Sürüklenen dosyaların resim dosyaları olup olmadığını kontrol et
if (e.Data.GetDataPresent(DataFormats.FileDrop) && IsImageFile((string[])e.Data.GetData(DataFormats.FileDrop)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
Sonra DragDrop kısmına kodlarımızı yazalım
C#:
// Sürüklenen dosyaları işle
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
if (IsImageFile(file))
{
Image image = Image.FromFile(file);
images.Add(image);
PictureBox pictureBox = new PictureBox
{
Image = image,
SizeMode = PictureBoxSizeMode.AutoSize
};
}
}
MessageBox.Show("Görseller başarıyla yüklendi.", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
Son olarak dosyaların doğruluğunu ve varlığını kontrol eden kodlarımızı ekleyelim.
C#:
private bool IsImageFile(string[] filepaths)
{
foreach (string filepath in filepaths)
{
if (!IsImageFile(filepath))
{
return false;
}
}
return true;
}
// Verilen dosya yolunun bir resim dosyası olup olmadığını kontrol et
private bool IsImageFile(string filepath)
{
string[] allowedExtensions = { ".bmp", ".jpg", ".jpeg", ".png", ".gif" };
string extension = Path.GetExtension(filepath.ToLower());
return Array.Exists(allowedExtensions, element => element == extension);
}
Kodun tamamı:
C#:
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using System.Drawing;
namespace PdfMaker
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.AllowDrop = true;
}
private List<Image> images = new List<Image>();
private void button2_Click(object sender, EventArgs e)
{
if (images.Count == 0) //koleksiyon yapısındaki görsel sayısı 0 ise kullanıcıyı görsel seçmeye zorla
{
MessageBox.Show("Lütfen en az bir görsel seçin.", "Hata", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog(); //dosyaların pdf olarak kaydedileceği yol ve ismi seçmek için dialog ekranı aç
saveFileDialog.Filter = "PDF Files|*.pdf";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
string pdfPath = saveFileDialog.FileName;
using (PdfDocument document = new PdfDocument())
{
foreach (Image image in images) // koleksiyon yapısından gelen resimler boyunca döngüyü döndür
{
PdfPage page = document.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
// görselleri bir a4 sayfası boyutunu geçmeyecek şekilde ayarla
double scaleFactor = Math.Min(page.Width.Point / image.Width, page.Height.Point / image.Height);
double scaledWidth = image.Width * scaleFactor;
double scaledHeight = image.Height * scaleFactor;
double x = (page.Width.Point - scaledWidth) / 2;
double y = (page.Height.Point - scaledHeight) / 2;
using (MemoryStream ms = new MemoryStream())
{
image.Save(ms, image.RawFormat);
XImage xImage = XImage.FromStream(ms);
gfx.DrawImage(xImage, x, y, scaledWidth, scaledHeight);
}
}
document.Save(pdfPath);
}
MessageBox.Show("PDF oluşturuldu!");
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Form1_DragEnter(object sender, DragEventArgs e)
{
// Sürüklenen dosyaların resim dosyaları olup olmadığını kontrol et
if (e.Data.GetDataPresent(DataFormats.FileDrop) && IsImageFile((string[])e.Data.GetData(DataFormats.FileDrop)))
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void Form1_DragDrop(object sender, DragEventArgs e)
{
// Sürüklenen dosyaları işle
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
if (IsImageFile(file))
{
Image image = Image.FromFile(file);
images.Add(image);
PictureBox pictureBox = new PictureBox
{
Image = image,
SizeMode = PictureBoxSizeMode.AutoSize
};
}
}
MessageBox.Show("Görseller başarıyla yüklendi.", "Bilgi", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
// Verilen dosya yolları arasında resim dosyası olup olmadığını kontrol et
private bool IsImageFile(string[] filepaths)
{
foreach (string filepath in filepaths)
{
if (!IsImageFile(filepath))
{
return false;
}
}
return true;
}
// Verilen dosya yolunun bir resim dosyası olup olmadığını kontrol et
private bool IsImageFile(string filepath)
{
string[] allowedExtensions = { ".bmp", ".jpg", ".jpeg", ".png", ".gif" };
string extension = Path.GetExtension(filepath.ToLower());
return Array.Exists(allowedExtensions, element => element == extension);
}
Okuduğunuz için teşekkürler.
Görsellerinizi form ekranına sürükleyip buttona basarak kullanabilirsiniz.
Görsellerinizi form ekranına sürükleyip buttona basarak kullanabilirsiniz.