dsurucu
C# kullanarak üçüncü taraf bir kütüphane kullanmadan bir PDF dosyasına filigran eklemek, doğrudan .NET Framework'ün sağladığı sınıflarla oldukça karmaşık olabilir. PDF formatı, basit bir metin dosyasının ötesine geçer ve birçok farklı nesne türünü içerir, bu yüzden PDF dosyalarını doğrudan manipüle etmek zordur. Ancak, PDF'lerin metin tabanlı yapısı ve özel PDF
formatlama kuralları kullanılarak bazı temel değişiklikler yapılabilir.
Alternatif Yöntem: System.Drawing Kütüphanesi Kullanarak Filigran Eklemek
Eğer üçüncü taraf bir kütüphane kullanmak istemiyorsanız ve sadece basit bir filigran eklemek istiyorsanız, bir çözüm şudur:
- PDF dosyasını bir bitmap veya görüntü formatına dönüştürmek.
System.Drawing
kütüphanesini kullanarak filigranı bu görüntüye eklemek.
- Sonra bu görüntüyü tekrar PDF formatına dönüştürmek.
Bu işlem, bir dosyanın her bir sayfası için tekrarlanmalıdır.
Kod Örneği
Bir PDF dosyasının her sayfasına filigran eklemek için aşağıdaki gibi bir yol izleyebilirsiniz:
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
public void AddWatermarkToImage(string inputImagePath, string outputImagePath, string watermarkText)
{
using (Image image = Image.FromFile(inputImagePath))
using (Graphics graphics = Graphics.FromImage(image))
{
// Filigran metni stil ayarları
Font font = new Font("Arial", 40, FontStyle.Bold, GraphicsUnit.Pixel);
Color color = Color.FromArgb(128, 255, 255, 255); // Transparan beyaz
SolidBrush brush = new SolidBrush(color);
// Yazı pozisyonunu ayarlama
SizeF textSize = graphics.MeasureString(watermarkText, font);
Point position = new Point(image.Width - ((int)textSize.Width + 10), image.Height - ((int)textSize.Height + 10));
// Yüksek kaliteli grafik ayarları
graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
graphics.DrawString(watermarkText, font, brush, position);
// Görüntüyü kaydetme
image.Save(outputImagePath, ImageFormat.Png);
}
}
Notlar:
- Bu yöntem, PDF dosyasını doğrudan değiştirmek yerine her bir sayfayı görüntüye dönüştürmeyi ve ardından filigran eklemeyi içerir. Ancak, çok sayıda sayfası olan büyük PDF'ler için verimli değildir.
- Gerçek bir PDF manipülasyonu yapmanız gerekiyorsa, üçüncü taraf kütüphaneler (örneğin iTextSharp veya PDFsharp gibi) kullanmanız çok daha kolay ve etkilidir.
Eğer gerçekten 3. parti kütüphaneler kullanmadan çözüm arıyorsanız, manuel bir yöntem olarak yukarıdaki gibi bir yaklaşım izleyebilirsiniz, fakat PDF işleme için özel olarak tasarlanmış bir kütüphane kullanmanız genel olarak tavsiye edilir.
YADA:
Daha gelişmiş ve üçüncü taraf kütüphaneler kullanmadan bir PDF dosyasına filigran eklemek için, PDF dosyasının yapısını anlamamız ve doğrudan PDF formatının içerdiği nesnelerle çalışmamız gerekiyor. PDF dosyaları, metin, resim ve diğer grafik öğeleri gibi farklı içerikleri organize eden özel bir yapıdadır. Bu nedenle, bir filigran eklemek için PDF dosyasını manuel olarak düzenlemek gerekecek.
Gelişmiş Bir Yaklaşım: PDF Formatı Kullanarak Filigran Eklemek
Aşağıda C# kullanarak PDF dosyasına doğrudan bir metin filigranı eklemek için temel bir örnek verilmiştir. Bu yaklaşım, PDF dosyasını bir Stream
olarak açmayı, dosya içeriğini okuyup düzenlemeyi ve filigranı doğrudan eklemeyi içerir. Bu örnek, basit bir PDF dosyasını düzenlemek için temel bir yol gösterir.
Kod Örneği: PDF Dosyasına Filigran Ekleme
using System;
using System.IO;
using System.Text;
class PDFWatermark
{
static void Main(string[] args)
{
string inputPdfPath = "input.pdf";
string outputPdfPath = "output.pdf";
string watermarkText = "CONFIDENTIAL";
AddWatermarkToPdf(inputPdfPath, outputPdfPath, watermarkText);
}
public static void AddWatermarkToPdf(string inputPath, string outputPath, string watermarkText)
{
byte[] pdfBytes = File.ReadAllBytes(inputPath);
using (MemoryStream ms = new MemoryStream())
{
// PDF başlığını yaz
ms.Write(Encoding.ASCII.GetBytes("%PDF-1.4\n"), 0, "%PDF-1.4\n".Length);
// Orijinal PDF içeriğini oku ve yeni dosyaya yaz
ms.Write(pdfBytes, 0, pdfBytes.Length);
// Filigran eklemek için bir sayfa ve grafik oluştur
string pageContent = string.Format("\n1 0 obj\n<< /Type /Page /Parent 3 0 R /Resources << /Font << /F1 4 0 R >> >> /Contents 2 0 R >> >>\nstream\nBT\n/F1 24 Tf\n1 0 0 1 100 100 Tm\n({0}) Tj\nET\nendstream\nendobj\n", watermarkText);
byte[] pageBytes = Encoding.ASCII.GetBytes(pageContent);
ms.Write(pageBytes, 0, pageBytes.Length);
// PDF sonunu yaz
string xref = "xref\n0 6\n0000000000 65535 f \n0000000010 00000 n \n0000000060 00000 n \n0000000119 00000 n \n0000000178 00000 n \n0000000237 00000 n \n";
string trailer = "trailer\n<< /Size 6 /Root 1 0 R >>\nstartxref\n297\n%%EOF\n";
ms.Write(Encoding.ASCII.GetBytes(xref), 0, xref.Length);
ms.Write(Encoding.ASCII.GetBytes(trailer), 0, trailer.Length);
File.WriteAllBytes(outputPath, ms.ToArray());
}
Console.WriteLine("Filigran başarıyla PDF dosyasına eklendi.");
}
}
Açıklamalar:
- PDF Yapısını Kullanma: Bu örnekte, PDF dosyasının başlığı, sayfa nesneleri, içerik akışı (
stream
) ve çapraz referans (xref
) tablosu gibi temel PDF yapıları doğrudan düzenlenir.
- Metin Filigranı Eklemek: Filigran, PDF dosyasının içerik akışına (
stream
) "BT" ve "ET" komutları arasında metin olarak eklenir.
- Dikkat Edilmesi Gerekenler:
- Bu yöntem, sadece çok basit PDF dosyaları için uygundur. Karmaşık PDF dosyaları için doğrudan PDF yapısını manipüle etmek oldukça zor ve hata yapmaya açık olabilir.
- PDF formatının yapısını ve içeriğini iyi anlamak gereklidir. Bu yüzden, doğrudan PDF dosyası düzenleme işleri genellikle üçüncü taraf kütüphaneler kullanılarak yapılır.
Bu Yöntemin Sınırları
Bu yöntem, doğrudan PDF formatını anlamayı ve dosyayı manuel olarak düzenlemeyi gerektirir. PDF formatının kendisi oldukça karmaşık olduğundan, daha büyük ve karmaşık PDF dosyaları için bu yöntem uygun değildir. Ayrıca, bu kod örneği, basit bir metin filigranı eklemeyi gösterir ve daha karmaşık grafik veya stil gereksinimleri için uygun değildir.
Bu tür bir doğrudan manipülasyonun gerektirdiği detaylar ve karmaşıklık nedeniyle, genellikle iTextSharp veya PDFsharp gibi üçüncü taraf kütüphaneler kullanmak çok daha pratik ve güvenlidir. Ancak üçüncü taraf kütüphaneleri kullanmaktan kaçınıyorsanız, yukarıda verilen yöntem gibi bir yol izleyebilirsiniz.