Úvod

Podniky, které ukládají smlouvy, finanční výkazy nebo regulatorní podání, musí tyto PDF soubory uchovávat v archivním formátu – PDF/A. Pokud jediný soubor unikne bez požadované konformity, 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 soulad s PDF/A pomocí Boolean vlastnosti.
  • Vyextrahovat přesnou verzi PDF/A u souborů, které jsou v souladu.
  • Integrovat kontrolu do větších pracovních toků (dávkové úlohy, API, serverless funkce).

Proč je přesná detekce PDF/A zásadní

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

  • Zůstat připravený na audit: Prokažte regulátorům, že každý uložený PDF splňuje standard ISO 19005.
  • Zachovat vizuální věrnost: PDF/A zaručuje, že písma, barvy a rozvržení přežijí budoucí prohlížeče.
  • Automatizovat ingestní pipeline: Odmítněte nesouladné soubory dříve, než se dostanou do systému pro správu 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.

Požadavky

  • .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.

Instalace

Vytvořte nový konzolový projekt a přidejte balíček:

dotnet new console -n DetectPdfA
cd DetectPdfA

dotnet add package GroupDocs.Metadata

Krok 1 – Inicializace enginu Metadata

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";

// Otevřete dokument – blok using zajišťuje uvolnění souborového handle.
using (Metadata metadata = new Metadata(pdfPath))
{
    // Následující kroky půjdou sem.
}

Klíčový bod: Příkaz using zajišťuje, že nativní zdroje jsou uvolněny okamžitě, což zabraňuje únikům souborových handle v dlouho běžících službách.

Krok 2 – Získání kořenového balíčku specifického pro PDF

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

using GroupDocs.Metadata.Formats.Pdf;

// Uvnitř using bloku z Kroku 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.

Krok 3 – Provedení kontroly souladu

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

if (root.FileType.IsPdfA)
{
    // Dokument splňuje – vypište přesnou verzi.
    Console.WriteLine($"✅ PDF/A compliant – version: {root.FileType.PdfFormat}");
}
else
{
    // Dokument nesplňuje požadavky PDF/A.
    Console.WriteLine("❌ The document is NOT PDF/A compliant.");
}

Co vidíte:

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

Kompletní funkční příklad

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.");
            }
        }
    }
}

Program spusťte pomocí dotnet run. Ukázkový výstup pro soubor, který je v souladu, může vypadat takto:

✅ PDF/A compliant – version: PdfA2u

A pro nesouladný soubor:

❌ The document is NOT PDF/A compliant.

Reálné aplikace

1. Automatizované archivní pipeline – Skenujte složku, validujte každý PDF pomocí výše uvedeného úryvku a přesunujte pouze soubory v souladu 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ý úryvek níže) a odmítněte nahrání, které není PDF/A, ještě před uložením.

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

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

Nejlepší postupy a tipy

  • Nejprve ověřte cestu – použijte Path.GetFullPath a