Giriş

Sözleşmeler, finansal tablolar veya düzenleyici dosyalar gibi belgeleri saklayan işletmeler, bu PDF’leri arşiv‑kalitesinde bir formatta – PDF/A – tutmak zorundadır. Tek bir dosya bile gerekli uyumluluğu sağlamazsa, denetçiler tüm partiye işaret koyabilir ve aylar sonra maliyetli yeniden işleme tetiklenebilir. Yüzlerce dosya günlük olarak geldiğinde manuel kontrollerin güvenilirliği hızla pratik dışı hâle gelir.

GroupDocs.Metadata for .NET, tahmin yürütmeye son verir. Açık bir IsPdfA bayrağı ve kesin PdfFormat enumu sunarak, kütüphane tek bir satırda belgenin herhangi bir PDF/A seviyesine uyup uymadığını ve uyuyorsa hangi belirli çeşide (ör. PDF/A‑1b, PDF/A‑2u) uygun olduğunu bildirir. Bu öğreticide bu mantığı bir konsol uygulamasına nasıl entegre edeceğinizi, bir web API aracılığıyla nasıl sunacağınızı ve toplu işleme nasıl ölçeklendireceğinizi göreceksiniz.

Kılavuzun sonunda şunları yapabilecek durumdasınız:

  • Metadata sınıfı ile bir PDF yüklemek.
  • Boolean bir özellik ile PDF/A uyumluluğunu belirlemek.
  • Uyumluluk sağlayan dosyalar için kesin PDF/A sürümünü çıkarmak.
  • Kontrolü daha büyük iş akışlarına (toplu işler, API’ler, sunucusuz fonksiyonlar) entegre etmek.

Neden Doğru PDF/A Algılama Önemlidir

Güvenilir, otomatik bir kontrol şunları sağlar:

  • Denetime hazır kalın: Düzenleyicilere her saklanan PDF’nin ISO 19005 standardına uygun olduğunu gösterin.
  • Görsel bütünlüğü koruyun: PDF/A, yazı tipleri, renkler ve düzenin gelecekteki görüntüleyicilerde de aynı kalmasını garanti eder.
  • Alım hatlarını otomatikleştirin: Belgelerinizin yönetim sistemine ulaşmadan önce uyumsuz dosyaları reddedin.
  • Maliyetli yeniden çalışmadan kaçının: Erken tespit, yaşam döngüsünün ilerleyen aşamalarında pahalı toplu yeniden doğrulamaları önler.

Önkoşullar

  • .NET 6.0 veya üzeri.
  • GroupDocs.Metadata NuGet paketi (en son sürüm).
  • Değerlendirmek istediğiniz bir veya daha fazla PDF dosyası.
  • (İsteğe bağlı) Geçici değerlendirme lisansı – GroupDocs portalından temin edilebilir.

Kurulum

Yeni bir konsol projesi oluşturun ve paketi ekleyin:

dotnet new console -n DetectPdfA
cd DetectPdfA

dotnet add package GroupDocs.Metadata

Adım 1 – Metadata Motorunu Başlatma

İlk olarak PDF’yi Metadata sınıfı ile açarız. Yapıcı, dosya formatını otomatik olarak tanır; ek parametre gerekmez.

using GroupDocs.Metadata;

string pdfPath = "sample.pdf";

// Belgeyi aç – using bloğu dosya tutamacının serbest bırakılmasını garanti eder.
using (Metadata metadata = new Metadata(pdfPath))
{
    // Sonraki adımlar burada yer alacak.
}

Temel nokta: using ifadesi, yerel kaynakların zamanında serbest bırakılmasını sağlar ve uzun süren hizmetlerde dosya tutamağı sızıntılarını önler.

Adım 2 – PDF‑Özgü Kök Paketi Alın

GroupDocs.Metadata, her format için güçlü tipli bir kök nesne sunar. PDF’ler için PdfRootPackage talep ederiz; bu nesne ihtiyacımız olan FileType bilgilerini içerir.

using GroupDocs.Metadata.Formats.Pdf;

// Adım 1'deki using bloğu içinde
var root = metadata.GetRootPackage<PdfRootPackage>();

root.FileType iki ilgi çekici özelliği barındırır:

  • IsPdfA – belge herhangi bir PDF/A seviyesine uyuyorsa true.
  • PdfFormatPdfA1b, PdfA2u vb. gibi kesin sürümü gösteren bir enum.

Adım 3 – Uyumluluk Kontrolünü Gerçekleştirin

Şimdi bayrağı okuyup, geçerli ise kesin PDF/A çeşidini çıktıya veririz.

if (root.FileType.IsPdfA)
{
    // Belge uyumlu – kesin sürümü raporla.
    Console.WriteLine($"✅ PDF/A uyumlu – sürüm: {root.FileType.PdfFormat}");
}
else
{
    // Belge PDF/A gereksinimlerini karşılamıyor.
    Console.WriteLine("❌ Belge PDF/A uyumlu DEĞİL.");
}

Gördükleriniz:

  • Tek bir Boolean (IsPdfA) anında bir git/kot cevap verir.
  • true olduğunda, PdfFormat kesin uyum seviyesini sağlar; bunu loglara, veri tabanlarına veya denetim raporlarına kaydedebilirsiniz.

Tam Çalışan Örnek

Üç adımı birleştirerek kompakt, kopyala‑yapıştır program elde ederiz:

using System;
using GroupDocs.Metadata;
using GroupDocs.Metadata.Formats.Pdf;

class Program
{
    static void Main(string[] args)
    {
        string pdfPath = "sample.pdf";

        using (Metadata metadata = new Metadata(pdfPath))
        {
            var root = metadata.GetRootPackage<PdfRootPackage>();

            if (root.FileType.IsPdfA)
            {
                Console.WriteLine($"✅ PDF/A uyumlu – sürüm: {root.FileType.PdfFormat}");
            }
            else
            {
                Console.WriteLine("❌ Belge PDF/A uyumlu DEĞİL.");
            }
        }
    }
}

Programı dotnet run ile çalıştırın. Uyumlu bir dosya için örnek çıktı şöyle olabilir:

✅ PDF/A uyumlu – sürüm: PdfA2u

Uyumsuz bir dosya için:

❌ Belge PDF/A uyumlu DEĞİL.

Gerçek‑Dünya Uygulamaları

1. Otomatik arşivleme hatları – Düşen klasörü tarayın, her PDF’yi yukarıdaki kodla doğrulayın ve yalnızca uyumlu dosyaları uzun vadeli depolama katmanına taşıyın.

2. Web portalı için yükleme doğrulaması – Aynı mantığı bir ASP.NET Core denetleyicisinde (aşağıdaki isteğe bağlı kod parçacığına bakın) sararak, kalıcı hale gelmeden önce PDF/A olmayan yüklemeleri reddedin.

3. Sunucusuz uyumluluk kontrolleri – Blob oluşturulmasında tetiklenen bir Azure Function olarak yöntemi dağıtın; sonuç JSON yükü uyumluluk durumunu içerir.

// Minimal Azure Function yükü (alıntı)
var result = new
{
    file = file.FileName,
    isPdfA = root.FileType.IsPdfA,
    format = root.FileType.IsPdfA ? root.FileType.PdfFormat.ToString() : null
};

En İyi Uygulamalar ve İpuçları

  • Yolu önce doğrulayınPath.GetFullPath kullanın ve Metadata oluşturmadan önce varlığını kontrol edin; FileNotFoundException önlenir.
  • Kütüphaneyi güncel tutun – yeni sürümler format algılamayı iyileştirir ve kenar‑durum hatalarını düzeltir.
  • Hemen serbest bırakın – tüm örneklerde gösterildiği gibi using deseni, yerel kaynakların serbest bırakılmasını garantiler.
  • İstisnaları yönetin – yapıcıyı try/catch içinde tutun ve bozuk PDF’ler için MetadataException kaydedin.
  • Büyük partiler için paralelleştirinParallel.ForEach içinde dosya başına ayrı bir Metadata örneği oluşturun; API örnekleri paylaşılmadığı sürece iş parçacığı‑güvenlidir.

Yaygın Sorunların Çözümü

Sorun: root.FileType.PdfFormat null döndürüyor ancak IsPdfA true.

  • Çözüm: GroupDocs.Metadata v23.6+ kullandığınızdan emin olun; bu sürümde enum tam olarak doldurulur. NuGet paketini güncellemek genellikle sorunu çözer.

Sorun: Bozuk bir PDF’de uygulama FileFormatException ile çöküyor.

  • Çözüm: new Metadata(pdfPath) çağrısını try/catch ile sarın, dosya adını kaydedin ve toplu senaryolarda dosyayı atlayın.

Sorun: Çok‑gigabaytlık PDF’leri işlerken yüksek bellek tüketimi.

  • Çözüm: Metadata‘yi bir FileStream ve enableStreaming bayrağı true olarak (ör. new Metadata(stream, true)) oluşturup akış modunu etkinleştirin.

Ek Kaynaklar