Introduction

Podniky, které ukládají smlouvy, finanční výkazy nebo regulační 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, které konkrétní variantě (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 zaruč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 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.

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

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

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: Příkaz using zajišťuje, že nativní prostředky jsou uvolněny okamžitě, což zabraňuje únikům souborových handle v dlouho běžících službách.

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, jež 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:

  • Jednoduchý Boolean (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í, připravený program 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. Automated archival pipelines – Skenujte složku s příchozími soubory, validujte každý PDF pomocí výše uvedeného úryvku a přesouvejte pouze shodné soubory do dlouhodobého úložiště.

2. Upload validation for a web portal – Zabalte stejnou logiku do ASP.NET Core kontroleru (viz volitelný úryvek níže) a odmítněte neshodné nahrávky ještě před jejich uložením.

3. Serverless compliance checks – 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

  • Validate the path first – použijte Path.GetFullPath a ověřte existenci před vytvořením Metadata, abyste předešli FileNotFoundException.
  • Keep the library up‑to‑date – novější verze zlepšují detekci formátů a opravují okrajové chyby.
  • Dispose promptly – vzor using ukázaný výše zaručuje uvolnění nativních prostředků.
  • Handle exceptions – obalte konstruktor do try/catch a logujte MetadataException pro poškozené PDF.
  • Parallelise for large batches – vytvořte samostatnou instanci Metadata pro každý soubor uvnitř Parallel.ForEach; API je thread‑safe, pokud instance nejsou sdílené.

Troubleshooting Common Issues

Problem: root.FileType.PdfFormat returns null even though IsPdfA is true.

  • Solution: Ujistěte se, že používáte GroupDocs.Metadata v23.6+ kde je výčet plně naplněn. Aktualizace NuGet balíčku obvykle problém vyřeší.

Problem: The application crashes with FileFormatException on a corrupt PDF.

  • Solution: Obalte volání new Metadata(pdfPath) do try/catch, logujte název souboru a v dávkových scénářích soubor přeskočte.

Problem: High memory consumption when processing multi‑gigabyte PDFs.

  • Solution: Aktivujte streaming mód vytvořením Metadata s FileStream a nastavením enableStreaming na true (např. new Metadata(stream, true)).

Additional Resources