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:
IsPdfA–true, pokud dokument splňuje jakoukoli úroveň PDF/A.PdfFormat– výčet jakoPdfA1b,PdfA2uatd., 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,PdfFormatdá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.GetFullPatha ověřte existenci před vytvořenímMetadata, abyste předešliFileNotFoundException. - Keep the library up‑to‑date – novější verze zlepšují detekci formátů a opravují okrajové chyby.
- Dispose promptly – vzor
usingukázaný výše zaručuje uvolnění nativních prostředků. - Handle exceptions – obalte konstruktor do
try/catcha logujteMetadataExceptionpro poškozené PDF. - Parallelise for large batches – vytvořte samostatnou instanci
Metadatapro 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)dotry/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
MetadatasFileStreama nastavenímenableStreamingnatrue(např.new Metadata(stream, true)).