PDF’yi GroupDocs Annotation .NET (C#) ile Nasıl Açıklama Eklenir
Ever needed to how to annotate pdf files programmatically and wondered which library gives you both power and simplicity? Whether you’re building a legal review platform, an e‑learning system, or a collaborative document workflow, GroupDocs.Annotation .NET delivers a production‑ready API that lets you add, edit, and delete PDF annotations directly from C# code. In this guide you’ll learn everything required to implement a full‑featured annotation engine, from initial setup to performance tuning for massive document libraries.
Hızlı Yanıtlar
- Bir PDF’ye metin notu eklemenin en hızlı yolu nedir?
Annotatorile belgeyi yükleyin, birTextAnnotationoluşturun,BoxveMessagedeğerlerini ayarlayın, ardındanAdd()çağırın – tipik sayfalar için bir saniyeden kısa sürede. - Hangi .NET sürümleri destekleniyor? .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5, .NET 6 ve .NET 7.
- Üretim için lisansa ihtiyacım var mı? Evet – tam veya geçici lisans su işaretlerini kaldırır ve tüm özelliklerin kilidini açar.
- 4 GB sunucuda 200 sayfalık PDF’leri işleyebilir miyim? Evet, daha sonra gösterilen toplu işleme ve doğru imha desenlerini kullanarak.
- GroupDocs.Annotation, yasal belge açıklamaları için uygun mu? Kesinlikle – 50’den fazla formatı destekler, ayrıntılı izin kontrolü ve denetim‑hazır meta veriler sunar.
“how to annotate pdf” nedir?
“How to annotate pdf”, PDF dosyalarına programlı olarak yorum, vurgulama, şekil veya kırpma gibi işaretlemeler ekleme sürecini ifade eder. GroupDocs.Annotation .NET kullanarak bu iş akışını otomatikleştirebilir, açıklama verilerini veritabanlarında saklayabilir ve sonuçları web veya masaüstü görüntüleyicilerde anında render edebilirsiniz.
PDF işaretlemesi için GroupDocs.Annotation neden kullanılmalı?
GroupDocs.Annotation 50+ giriş ve çıkış formatını destekler, 500 MB‘a kadar PDF’leri tüm dosyayı belleğe yüklemeden işleyebilir ve her istek kendi Annotator örneğini oluşturduğunda thread‑safe işlemler sunar. Sadece PDF odaklı hafif kütüphanelerle karşılaştırıldığında, aynı API ile Word, PowerPoint ve görüntü dosyalarını da işaretlemenize olanak tanır; bu da çok‑formatlı platformlar için geliştirme çabasını büyük ölçüde azaltır.
Gerçek Dünya Uygulamaları: Belge Açıklamasının Parladığı Yerler
İş bağlamını anlamak, doğru açıklama türünü seçmenize yardımcı olur.
- Yasal Belge İncelemesi – Avukatlar yorum ekler, maddeleri vurgular ve revizyon geçmişi ekler. GroupDocs.Annotation, her değişikliği kullanıcı kimlikleri, zaman damgaları ve isteğe bağlı dijital imzalarla izler, denetim uyumluluğu sağlar.
- Eğitim Platformları – Eğitmenler, şekiller çizerek, yapışkan notlar ekleyerek veya sesli geri bildirim yerleştirerek öğrenci PDF’lerini notlayabilir.
- Sağlık Dokümantasyonu – Klinik çalışanlar radyoloji raporlarını veya hasta kartlarını HIPAA‑uyumlu meta verilerle koruyarak işaretler.
- Yazılım Dokümantasyonu – Teknik yazarlar API spesifikasyonları üzerinde iş birliği yapar, çağrı kutuları ve revizyon notları ekler, kaynak PDF’den ayrılmaz.
- Finansal Hizmetler – Uyum görevlileri kredi sözleşmeleri, risk değerlendirmeleri ve denetim izlerini işaretler, ardından arşivleme için işaretli sürümü dışa aktarır.
Önkoşullar ve Kurulum: Ortamınızı Hazırlama
Sistem Gereksinimleri
- IDE: Visual Studio 2019 veya daha yenisi (Community sürümü yeterlidir).
- Runtime: .NET Framework 4.6.1+ veya .NET Core 2.0+ (büyük PDF’ler için 8 GB RAM önerilir).
- İzinler: Açıklamalı PDF’lerin kaydedileceği klasöre yazma erişimi.
Bilgi Önkoşulları
- Temel C# sözdizimi ve nesne‑yönelimli kavramlar.
- NuGet paket yönetimi hakkında bilgi.
- Dosya I/O (akış okuma/yazma) anlayışı.
GroupDocs.Annotation .NET’in Kurulumu
Kütüphaneyi NuGet üzerinden ekleyebilirsiniz. İş akışınıza uygun yöntemi seçin.
NuGet Package Manager Console Kullanarak
Install-Package GroupDocs.Annotation -Version 25.4.0
.NET CLI Kullanarak (CI/CD boru hatları için tercih edilir)
dotnet add package GroupDocs.Annotation --version 25.4.0
Pro İpucu: Versiyonu sabitleyin (örn.
Install-Package GroupDocs.Annotation -Version 23.12). Bu, paket otomatik güncellendiğinde istenmeyen kırılma değişikliklerini önler. En son sürümleri GroupDocs releases page adresinde görebilirsiniz.
Lisans Seçenekleri: Projeniz İçin Uygun Olanı Seçin
- Ücretsiz Deneme – 30 gün boyunca değerlendirme su işaretleriyle tam işlevsellik.
- Geçici Lisans – 30 gün boyunca su işaretlerini kaldırır, kanıt‑konseptleri için idealdir. geçici lisans sayfası adresine bakın.
- Tam Lisans – Sınırsız üretim kullanımı, öncelikli destek ve su işareti yok. GroupDocs store üzerinden satın alın.
Temel Proje Kurulumu
Paketi kurduktan sonra aşağıdaki using ifadelerini ekleyerek yeni bir C# konsol veya ASP.NET projesi oluşturun:
using GroupDocs.Annotation;
using GroupDocs.Annotation.Models;
using GroupDocs.Annotation.Models.AnnotationModels;
using System.IO;
using System.Collections.Generic;
// Initialize Annotator with an input document path
string inputPath = Path.Combine("YOUR_DOCUMENT_DIRECTORY", "sample.pdf");
Önemli:
YOUR_DOCUMENT_DIRECTORYifadesini PDF’lerinizin mutlak yolu ile değiştirin.Path.Combinekullanmak, Windows ve Linux’ta doğru yol ayırıcılarını garanti eder.
Adım‑Adım Eğitim: İlk Açıklamanızı Ekleyin
PDF belgesini açıklama için nasıl yüklersiniz?
Annotator sınıfı, belgeyi yükleyen ve tüm açıklama işlemlerini yöneten temel bileşendir. PDF’yi doğru şekilde yüklemek, kütüphanenin sayfa boyutlarını, meta verileri ve mevcut açıklamaları okuyabilmesini sağlar, ardından değişiklik uygulanır.
PDF’yi Annotator yapıcısına dosya yolu ve isteğe bağlı yükleme seçenekleriyle geçerek yükleyin. Bu adım dosyayı doğrular ve güvenli bir şekilde değiştirilebilecek bir bellek içi temsil oluşturur; ayrıca bir şifre sağlanırsa şifreli dosyaları da işler.
try
{
using (Annotator annotator = new Annotator(inputPath))
{
// Your annotation code goes here
Console.WriteLine("Document loaded successfully!");
}
}
catch (Exception ex)
{
Console.WriteLine($"Error loading document: {ex.Message}");
}
try‑catch bloğu, eksik dosyalar, bozuk PDF’ler veya desteklenmeyen formatlar karşısında uygulamanızın çökmeden nazikçe hata vermesini sağlar.
PDF’ye bir metin açıklaması nasıl eklenir?
TextAnnotation, PDF sayfasına yerleştirilebilen yapışkan‑not tarzı bir yorumdur. Bir tane eklemek, nesneyi oluşturmayı, konumunu tanımlamayı, gösterilecek mesajı ayarlamayı ve son olarak Annotator üzerinden eklemeyi içerir.TextAnnotation nesnesi oluşturun, Box özelliğiyle sınırlayıcı dikdörtgeni tanımlayın, görünür Messageı ayarlayın ve ardından Annotator üzerinde Add() çağırın. Açıklama belirtilen sayfada anında görünür; isterseniz renk ve opaklık ayarlarıyla görünümünü özelleştirebilirsiniz.
// Create a highlight annotation
HighlightAnnotation highlight = new HighlightAnnotation
{
Box = new Rectangle(100, 100, 200, 20), // x, y, width, height
CreatedOn = DateTime.Now,
Message = "This section needs review",
Replies = new List<Reply>
{
new Reply
{
Comment = "Please verify these numbers",
RepliedOn = DateTime.Now
}
}
};
// Add the annotation to the document
annotator.Add(highlight);
Boxözelliği neden önemli? Dikdörtgen, sayfanın sol‑alt köşesinden ölçülen puan (1 point = 1/72 inch) cinsindendir. Hassas koordinatlar, notların inceleyicilerin beklediği tam konuma yerleştirilmesini sağlar.
Kaynak dosyayı üzerine yazmadan açıklamalı PDF nasıl kaydedilir?
Yeni bir dosyaya kaydetmek, denetim izleri ve geri dönüş senaryoları için orijinal belgeyi korur. Save metodu, yeni açıklamalar ve meta veriler dahil tüm değişiklikleri belirtilen yola yazar, kaynak dosyayı dokunulmaz bırakır.Annotator üzerinde Save() çağırın ve yeni bir dosya yolu sağlayın. Bu, orijinal belgeyi korur; gerektiğinde farklı bir çıktı formatı belirterek dönüşüm de yapabilirsiniz.
string outputPath = Path.Combine("YOUR_OUTPUT_DIRECTORY", "annotated_document.pdf");
annotator.Save(outputPath);
Console.WriteLine($"Document saved to: {outputPath}");
En İyi Uygulama: Orijinal ve açıklamalı sürümleri ayrı sürüm‑kontrolü klasörlerinde tutun. Bu strateji, düzenleyici uyumluluğu ve değişiklik takibini basitleştirir.
İleri Düzey Açıklama Teknikleri
Tek bir işlemde birden fazla açıklama türü nasıl eklenir?
GroupDocs.Annotation, HighlightAnnotation, StrikeoutAnnotation, PolylineAnnotation, RedactionAnnotation ve daha fazlasını içeren zengin bir sınıf seti sunar. Her örneği oluşturup özelliklerini yapılandırdıktan sonra aynı Annotator üzerine ekleyerek, I/O işlemlerini en aza indirir ve belge durumunu tutarlı tutarsınız.
Her açıklama tipini örnekleyin, özgün özelliklerini (renk, opaklık, noktalar vb.) ayarlayın ve aynı Annotator örneğine sırayla ekleyin. Save() çağrıldığında tüm açıklamalar birlikte yazılır, atomik güncellemeler sağlanır ve kısmi yazma riskleri azalır.
// Text annotation for comments
TextAnnotation textNote = new TextAnnotation
{
Box = new Rectangle(300, 200, 100, 30),
Message = "Review required",
CreatedOn = DateTime.Now,
FontColor = 16711680, // Red color in RGB
BackgroundColor = 16777215 // White background
};
// Arrow annotation to point out specific elements
ArrowAnnotation pointer = new ArrowAnnotation
{
Box = new Rectangle(150, 150, 50, 50),
Message = "Important calculation here",
CreatedOn = DateTime.Now
};
// Add all annotations at once
annotator.Add(textNote);
annotator.Add(pointer);
Mevcut bir açıklamanın rengini veya yorumunu nasıl güncellerim?
GetById metodu, benzersiz kimliğiyle belirli bir açıklamayı getirir; böylece sadece ihtiyacınız olan alanları değiştirebilirsiniz. Nesneyi aldıktan sonra Color veya Message gibi özellikleri değiştirip Update ile kalıcı hâle getirin.GetById() ile açıklamayı kimliğine göre alın, istenen özellikleri (ör. Color, Message) değiştirin ve Update() çağırın. Bu, açıklamayı yeniden oluşturmak zorunda kalmadan konumunu, sürüm geçmişini ve ek yanıtları korur.
// Get all annotations from the document
List<AnnotationBase> annotations = annotator.Get();
// Find and update a specific annotation
foreach (var annotation in annotations)
{
if (annotation.Message.Contains("Review required"))
{
annotation.Message = "Review completed ✓";
annotator.Update(annotation);
break;
}
}
Performans Notu: Binlerce açıklama içeren belgeler için açıklama kimliklerini bir sözlükte önbelleğe alarak doğrusal aramaları önleyin.
Yaygın Sorunlar ve Sorun Giderme
Sorun 1 – “Document format not supported”
Doğrudan Yanıt: Dosyanın uzantısının GroupDocs.Annotation desteklenen formatlar listesinde olduğundan emin olun; değilse önce PDF’ye dönüştürün veya formatı işleyen farklı bir GroupDocs ürününü kullanın.
Çözüm:
- supported formats list adresini kontrol edin
- Desteklenmeyen dosyaları PDF’ye dönüştürmek için GroupDocs.Conversion kullanın.
// Check if format is supported before processing
string extension = Path.GetExtension(inputPath).ToLower();
if (extension != ".pdf" && extension != ".docx" && extension != ".pptx")
{
throw new NotSupportedException($"File format {extension} is not supported");
}
Sorun 2 – Açıklamalar yanlış konumlarda görünüyor
Doğrudan Yanıt: Doğru koordinat sistemini (orijinin sol‑alt köşe olduğu) kullandığınızdan ve sayfanın dönüş metadata’sına saygı gösterdiğinizden emin olun. Box değerlerini buna göre ayarlayın.
Çözüm:
// Always validate coordinates before adding annotations
private bool IsValidCoordinate(Rectangle box, double pageWidth, double pageHeight)
{
return box.X >= 0 && box.Y >= 0 &&
(box.X + box.Width) <= pageWidth &&
(box.Y + box.Height) <= pageHeight;
}
Sorun 3 – Büyük belgelerde bellek sorunları
Doğrudan Yanıt: Büyük PDF’leri toplu işleyin, her toplu işlemden sonra Annotator‘ı imha edin ve akış modunu etkinleştirerek tüm dosyayı RAM’e yüklemekten kaçının.
Çözüm:
// Process large documents in chunks
using (Annotator annotator = new Annotator(inputPath))
{
// Set memory-friendly options
LoadOptions loadOptions = new LoadOptions
{
PreviewPageCount = 1 // Load pages on demand
};
// Process annotations in batches
const int batchSize = 10;
for (int i = 0; i < annotations.Count; i += batchSize)
{
var batch = annotations.Skip(i).Take(batchSize);
foreach (var annotation in batch)
{
annotator.Add(annotation);
}
// Force garbage collection between batches for large documents
if (i % 50 == 0)
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
}
}
Performans Optimizasyon İpuçları
Binlerce PDF’i toplu olarak nasıl verimli işleyebilirim?
Açıklama isteklerini bir listeye toplayın, her belge için tek bir Annotator açın, tüm değişiklikleri uygulayın ve ardından bir kez Save() çağırın. Bu, I/O yükünü azaltır, dahili tamponlamayı kullanır ve büyük iş yüklerinde bellek kullanımını öngörülebilir tutar.
Açıklama isteklerini bir listeye toplayın, her belge için tek bir Annotator açın, tüm değişiklikleri uygulayın ve ardından bir kez Save() çağırın. Bu, I/O yükünü azaltır ve dahili tamponlamayı kullanır.
// Inefficient approach (don't do this)
foreach (var annotation in annotations)
{
annotator.Add(annotation);
annotator.Save(outputPath); // Saving after each annotation is expensive
}
// Efficient approach
foreach (var annotation in annotations)
{
annotator.Add(annotation);
}
annotator.Save(outputPath); // Save once at the end
Çok sayfalı PDF’lerde belleği nasıl yönetirim?
LoadOptions içinde MemoryOptimization = true bayrağını etkinleştirin ve sayfaları sıralı olarak işleyin. Bu, kütüphanenin yalnızca aktif sayfayı bellekte tutmasını sağlar ve çok büyük dosyalar için RAM ayak izini dramatik şekilde düşürür.LoadOptions içinde MemoryOptimization = true bayrağını etkinleştirin ve sayfaları sıralı olarak işleyin. Bu, kütüphanenin yalnızca aktif sayfayı bellekte tutmasını sağlar ve çok büyük dosyalar için RAM ayak izini dramatik şekilde düşürür.
// Use using statements to ensure proper disposal
using (var annotator = new Annotator(inputPath))
{
// Your annotation code here
} // Annotator is automatically disposed, freeing memory
Sık erişilen belgeleri nasıl önbelleğe alırım?
Açıklama JSON’larını dağıtık bir önbellekte (örn. Redis) belge kimliğiyle anahtarlandırarak saklayın. Bir kullanıcı aynı PDF’yi istediğinde, dosyayı diskten yeniden okumak yerine önbellekten alın, böylece gecikme ve I/O yükü azalır.
Açıklama JSON’larını dağıtık bir önbellekte (örn. Redis) belge kimliğiyle anahtarlandırarak saklayın. Bir kullanıcı aynı PDF’yi istediğinde, dosyayı diskten yeniden okumak yerine önbellekten alın, böylece gecikme ve I/O yükü azalır.
// Cache document metadata to avoid reloading
private static readonly Dictionary<string, DocumentInfo> _documentCache =
new Dictionary<string, DocumentInfo>();
private DocumentInfo GetDocumentInfo(string path)
{
if (!_documentCache.ContainsKey(path))
{
using (var annotator = new Annotator(path))
{
_documentCache[path] = annotator.GetDocumentInfo();
}
}
return _documentCache[path];
}
Üretim Uygulamaları için En İyi Uygulamalar
Hata yönetimi ve günlükleme nasıl uygulanır?
Her Annotator işlemini try‑catch bloklarıyla sarın, istisnaları yapılandırılmış bir logger (Serilog, NLog) ile kaydedin ve belge yolu, kullanıcı kimliği ve yığın izini ekleyin. Bu, üretimde sorun gidermeyi çok kolaylaştırır ve denetim gereksinimlerini karşılamanıza yardımcı olur.
Her Annotator işlemini try‑catch bloklarıyla sarın, istisnaları yapılandırılmış bir logger (Serilog, NLog) ile kaydedin ve belge yolu, kullanıcı kimliği ve yığın izini ekleyin.
public async Task<bool> AddAnnotationSafely(string documentPath, AnnotationBase annotation)
{
try
{
using (var annotator = new Annotator(documentPath))
{
annotator.Add(annotation);
annotator.Save(documentPath.Replace(".pdf", "_annotated.pdf"));
return true;
}
}
catch (Exception ex)
{
// Log the error (use your preferred logging framework)
Console.WriteLine($"Annotation failed for {documentPath}: {ex.Message}");
return false;
}
}
Kullanıcı tarafından sağlanan açıklama verileri nasıl doğrulanır?
Gelen JSON alanlarının (sayfa numarası, dikdörtgen koordinatları, açıklama tipi) kabul edilebilir aralıklar içinde olduğundan emin olun, nesneleri oluşturmadan önce kontrol edin. Sınır dışı koordinatları net bir HTTP 400 yanıtı ile reddedin ve yardımcı bir hata mesajı sağlayın.
Gelen JSON alanlarının (sayfa numarası, dikdörtgen koordinatları, açıklama tipi) kabul edilebilir aralıklar içinde olduğundan emin olun, nesneleri oluşturmadan önce kontrol edin. Sınır dışı koordinatları net bir HTTP 400 yanıtı ile reddedin ve yardımcı bir hata mesajı sağlayın.
public bool ValidateAnnotationInput(AnnotationBase annotation)
{
if (annotation == null)
return false;
if (string.IsNullOrWhiteSpace(annotation.Message))
return false;
if (annotation.Box.Width <= 0 || annotation.Box.Height <= 0)
return false;
return true;
}
Çok‑kullanıcı web hizmetinde thread safety nasıl sağlanır?
İstek başına yeni bir Annotator örneği oluşturun; aynı örneği thread’ler arasında paylaşmayın. Paylaşılan bir dosyaya erişim koordinasyonu gerekiyorsa, eşzamanlı yazmaları önlemek için SemaphoreSlim veya dosya‑seviyesi kilidi kullanın.
İstek başına yeni bir Annotator örneği oluşturun; aynı örneği thread’ler arasında paylaşmayın. Paylaşılan bir dosyaya erişim koordinasyonu gerekiyorsa, eşzamanlı yazmaları önlemek için SemaphoreSlim veya dosya‑seviyesi kilidi kullanın.
private readonly object _annotationLock = new object();
public void AddAnnotationThreadSafe(string documentPath, AnnotationBase annotation)
{
lock (_annotationLock)
{
using (var annotator = new Annotator(documentPath))
{
annotator.Add(annotation);
annotator.Save(documentPath);
}
}
}
GroupDocs.Annotation ve Alternatifler Ne Zaman Kullanılmalı?
GroupDocs.Annotation’ı seçin şunlara ihtiyacınız olduğunda:
- Çapraz‑format desteği (PDF, DOCX, PPTX, görüntüler).
- Kırpma, serbest el çizimi ve özel meta veri gibi gelişmiş açıklama türleri.
- Kurumsal‑düzey lisans, SLA‑destekli hizmet ve düzenli güvenlik güncellemeleri.
Daha hafif alternatifleri düşünün yalnızca PDF ile çalışıyorsanız, bütçe kısıtlamalarınız sıkıysa veya açık kaynak bir yığını tercih ediyorsanız.
Sık Sorulan Sorular
S: GroupDocs.Annotation .NET’i lisans olmadan kullanabilir miyim?
C: Evet, ücretsiz deneme 30 gün boyunca tam işlevsellik sağlar ancak her çıktı dosyasına değerlendirme su işareti ekler. Üretim ortamında su işaretlerini kaldırmak için geçici veya tam lisans uygulamanız gerekir.
S: GroupDocs.Annotation hangi .NET sürümlerini destekliyor?
C: Kütüphane .NET Framework 4.6.1+, .NET Core 2.0+, .NET 5, .NET 6 ve .NET 7 ile çalışır; bu sayede hem eski Windows servisleri hem de modern çapraz‑platform konteynerler için uygundur.
S: GroupDocs.Annotation .NET’in maliyeti nedir?
C: Geliştirici lisansı yaklaşık $1,999’dan başlar ve dağıtılan uygulama sayısına göre ölçeklenir. En güncel fiyatlar ve hacim indirimleri için GroupDocs pricing page adresine bakın.
S: GroupDocs.Annotation ile hangi belge formatlarını açıklayabilirim?
C: PDF, DOC/DOCX, PPT/PPTX, XLS/XLSX, JPEG, PNG, TIFF ve daha fazlası dahil 50’den fazla format desteklenir. PDF, vektör tabanlı şekiller ve OCR‑hazır kırpma gibi en kapsamlı özellik setine sahiptir.
S: Şifre korumalı PDF’leri açıklayabilir miyim?
C: Evet. Annotator oluştururken şifreyi sağlayın:
LoadOptions loadOptions = new LoadOptions { Password = "your_password" };
using (Annotator annotator = new Annotator(inputPath, loadOptions))
{
// Your annotation code here
}
S: Açıklamalarım neden yanlış konumda görünüyor?
C: GroupDocs, (0,0) noktasının sol‑alt köşe olduğu ve ölçümlerin puan cinsinden olduğu bir Kartezyen koordinat sistemi kullanır. Yanlış konum genellikle piksel tabanlı değerlerin kullanılması veya sayfa dönüşünün göz ardı edilmesinden kaynaklanır. Piksel değerlerini puana (1 pixel ≈ 0.75 point @ 96 DPI) dönüştürün ve dönüş metadata’sını ayarlayın.
// Correct approach - validate coordinates
private bool ValidateCoordinates(Rectangle box, double pageWidth, double pageHeight)
{
return box.X >= 0 && box.Y >= 0 &&
(box.X + box.Width) <= pageWidth &&
(box.Y + box.Height) <= pageHeight;
}
S: PDF’den mevcut açıklamaları nasıl alırım?
C: Annotator örneği üzerinde Get() metodunu çağırın; bu, kimlikleri, tipleri ve meta verileriyle tüm açıklama nesnelerinin bir koleksiyonunu döndürür.
using (Annotator annotator = new Annotator(inputPath))
{
List<AnnotationBase> annotations = annotator.Get();
foreach (var annotation in annotations)
{
Console.WriteLine($"Annotation: {annotation.Message}");
}
}
S: Belirli açıklamaları programlı olarak silebilir miyim?
C: Evet. Tek bir açıklamayı kaldırmak için Delete(id) kullanın veya tüm belgeyi temizlemek için DeleteAll() çağırın. Silmeden önce tipe göre filtreleme de yapabilirsiniz.
List<AnnotationBase> annotationsToDelete = annotator.Get()
.Where(a => a.Message.Contains("obsolete"))
.ToList();
foreach (var annotation in annotationsToDelete)
{
annotator.Remove(annotation);
}
S: Açıklama özelliklerini (renk, mesaj vb.) nasıl güncellerim?
C: Açıklamayı alın, Color veya Message gibi özellikleri değiştirin ve Update() çağırın. Değişiklik, bir sonraki Save() işleminde kalıcı hâle gelir.
var annotations = annotator.Get();
var targetAnnotation = annotations.FirstOrDefault(a => a.Id == specificId);
if (targetAnnotation != null)
{
targetAnnotation.Message = "Updated message";
annotator.Update(targetAnnotation);
}
S: Açıklamalara özel meta veri ekleyebilir miyim?
C: Kesinlikle. Çoğu açıklama sınıfı, inceleme kimlikleri, zaman damgaları veya iş akışı durumları gibi anahtar‑değer çiftlerini saklamanızı sağlayan bir Replies koleksiyonu sunar.
var annotation = new HighlightAnnotation
{
// ... other properties
Replies = new List<Reply>
{
new Reply
{
Comment = "Custom metadata: priority=high, category=legal",
RepliedOn = DateTime.Now
}
}
};
S: GroupDocs.Annotation, işaretli PDF’lerde dijital imzaları destekliyor mu?
C: Annotation kütüphanesi esas olarak işaretlemeye odaklanır; ancak açıklamalardan sonra GroupDocs.Signature .NET ile kriptografik imzalar ekleyebilir, hem görsel hem de yasal bütünlüğü sağlayabilirsiniz.
S: Açıklamaları dışa aktararak JSON veya XML olarak alabilir miyim?
C: Kütüphane yerleşik bir dışa aktarıcı sunmaz, ancak System.Text.Json veya XmlSerializer kullanarak açıklama nesnelerini kendiniz serileştirebilirsiniz. Bu, dış denetim sistemleriyle entegrasyonu kolaylaştırır.
List<AnnotationBase> annotations = annotator.Get();
string jsonAnnotations = JsonConvert.SerializeObject(annotations, Formatting.Indented);
File.WriteAllText("annotations.json", jsonAnnotations);
Son Güncelleme: 2026-05-21
Test Edilen Versiyon: GroupDocs.Annotation 23.12 for .NET
Yazar: GroupDocs