Introduction

Podniky, které ukládají smlouvy, finanční výkazy nebo regulatorní podání, musí tyto PDF uchovávat ve formátu určeném pro archivaci – PDF/A. Pokud jediný soubor unikne bez požadované shody, auditoři mohou označit celou dávku a měsíce později může být spuštěno nákladné přepracování. Spoléhání se na ruční kontroly se rychle stává nepraktickým, když denně přichází stovky souborů.

GroupDocs.Metadata pro .NET odstraňuje hádání. Díky jasnému příznaku IsPdfA a přesné výčtové hodnotě PdfFormat knihovna v jedné řádce říká, zda dokument splňuje jakoukoli úroveň PDF/A a pokud ano, kterou konkrétní variantu (např. PDF/A‑1b, PDF/A‑2u) odpovídá. V tomto tutoriálu uvidíte, jak tuto logiku zapojit do konzolové aplikace, vystavit ji přes webové API a škálovat pro dávkové zpracování.

Na konci průvodce budete schopni:

  • Načíst PDF pomocí třídy Metadata.
  • Určit shodu s PDF/A pomocí Boolean vlastnosti.
  • Vyextrahovat přesnou verzi PDF/A u souborů, které jsou shodné.
  • Integrovat kontrolu do větších pracovních toků (dávkové úlohy, API, serverless funkce).

Why Accurate PDF/A Detection Is Crucial

Spolehlivá, automatizovaná kontrola vám pomůže:

  • Zůstat připravený na audit: Prokázat regulátorům, že každý uložený PDF splňuje standard ISO 19005.
  • Zachovat vizuální věrnost: PDF/A zajišťuje, že písma, barvy a rozvržení přežijí budoucí prohlížeče.
  • Automatizovat ingestní pipeline: Odmítnout nesplňující soubory dříve, než se dostanou do systému správy dokumentů.
  • Vyhnout se nákladnému přepracování: Včasná detekce zabraňuje drahému opakovanému ověřování později v životním cyklu.

Prerequisites

  • .NET 6.0 nebo novější.
  • GroupDocs.Metadata NuGet balíček (nejnovější verze).
  • Jeden nebo více PDF souborů, které chcete vyhodnotit.
  • (Volitelné) Dočasná evaluační licence – můžete ji získat na portálu GroupDocs.

Installation

Create a new console project and add the package:

dotnet new console -n DetectPdfA
cd DetectPdfA

dotnet add package GroupDocs.Metadata

Step 1 – Initialise the Metadata Engine

Nejprve otevřeme PDF pomocí třídy Metadata. Konstruktor automaticky rozpozná formát souboru, takže nejsou potřeba žádné další parametry.

using GroupDocs.Metadata;

string pdfPath = "sample.pdf";

// Open the document – the using block guarantees the file handle is released.
using (Metadata metadata = new Metadata(pdfPath))
{
    // Subsequent steps go here.
}

Key point: The using statement ensures that native resources are disposed promptly, preventing file‑handle leaks in long‑running services.

Step 2 – Get the PDF‑Specific Root Package

GroupDocs.Metadata poskytuje silně typovaný kořenový objekt pro každý formát. Pro PDF požádáme o PdfRootPackage, který obsahuje informace o FileType, které potřebujeme.

using GroupDocs.Metadata.Formats.Pdf;

// Inside the using block from Step 1
var root = metadata.GetRootPackage<PdfRootPackage>();

root.FileType obsahuje dvě zajímavé vlastnosti:

  • IsPdfAtrue, pokud dokument splňuje jakoukoli úroveň PDF/A.
  • PdfFormat – výčet jako PdfA1b, PdfA2u atd., který udává přesnou verzi.

Step 3 – Perform the Compliance Check

Nyní přečteme příznak a v případě potřeby vypíšeme konkrétní variantu PDF/A.

if (root.FileType.IsPdfA)
{
    // Document conforms – report the exact version.
    Console.WriteLine($"✅ PDF/A compliant – version: {root.FileType.PdfFormat}");
}
else
{
    // Document does not meet PDF/A requirements.
    Console.WriteLine("❌ The document is NOT PDF/A compliant.");
}

What you see:

  • Jedna Boolean hodnota (IsPdfA) poskytuje okamžitou odpověď ano/ne.
  • Když je true, PdfFormat dává přesnou úroveň shody, kterou můžete uložit do logů, databází nebo auditních zpráv.

Complete Working Example

Spojením tří kroků získáte kompaktní program připravený ke zkopírování:

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 compliant – version: {root.FileType.PdfFormat}");
            }
            else
            {
                Console.WriteLine("❌ The document is NOT PDF/A compliant.");
            }
        }
    }
}

Spusťte program pomocí dotnet run. Ukázkový výstup pro shodný soubor může vypadat takto:

✅ PDF/A compliant – version: PdfA2u

A pro nesplňující soubor:

❌ The document is NOT PDF/A compliant.

Real‑World Applications

1. Automatizované archivní pipeline – Skenujte složku, validujte každý PDF pomocí výše uvedeného úryvku a přesouvejte pouze shodné soubory do dlouhodobého úložiště.

2. Validace nahrávání pro webový portál – Zabalte stejnou logiku do ASP.NET Core kontroleru (viz volitelný kód níže) a odmítněte nahrání, které není PDF/A, ještě před uložením.

3. Serverless kontroly shody – Nasadíte metodu jako Azure Function, která se spustí při vytvoření Blobu a vrátí JSON payload se stavem shody.

// Minimal Azure Function payload (excerpt)
var result = new
{
    file = file.FileName,
    isPdfA = root.FileType.IsPdfA,
    format = root.FileType.IsPdfA ? root.FileType.PdfFormat.ToString() : null
};

Best Practices & Tips

  • Ověřte cestu nejprve – použijte Path.GetFullPath a zkontrolujte existenci před vytvořením Metadata,