Technický článek

Technický článek: PDF/A, PDF/X, and PDF/UA Output in Delphi: HotPDF Guide v češtině

Tato lokalizovaná verze se věnuje tématu PDF/A, PDF/X, and PDF/UA Output in Delphi: a HotPDF Guide a bere aktualizovaný anglický článek jako technický základ pro týmy pracující s Delphi, PDF a dokumentovým softwarem

Stránka převádí aktualizovaný výchozí článek na konkrétní kontrolní body pro návrh, implementaci a ověření

Co bylo synchronizováno z anglického článku

Anglický výchozí text byl rozšířen o praktický kontext, technická rozhodnutí a konkrétní příklady, takže tato stránka funguje jako pracovní průvodce, nikoli jako krátké shrnutí

Důležité části aktualizovaného výchozího článku:

  • Nejprve použijte malé reprodukovatelné vstupní soubory
  • Názvy produktů, API, souborů a literálové hodnoty ponechte beze změny
  • Uložte výstup validátoru a informace o verzích spolu s vytvořeným vzorkem

Praktická implementační rozhodnutí

Začněte typem souboru, očekávaným výstupem a chybovým stavem, který má vidět uživatel. Potom svažte každé volání API s ověřitelným výsledkem, aby validace, logování i podpora mohly zopakovat zákaznický scénář

  • Nejprve použijte malé reprodukovatelné vstupní soubory
  • Názvy produktů, API, souborů a literálové hodnoty ponechte beze změny
  • Uložte výstup validátoru a informace o verzích spolu s vytvořeným vzorkem

Kód a body API

Ukázky kódu zůstávají beze změny, aby je vývojář mohl porovnat přímo s projekty Delphi, C++Builder a Lazarus/FPC

var
  Pdf: THotPDF;
  ICC: TFileStream;
begin
  Pdf := THotPDF.Create(nil);
  try
    Pdf.FileName := 'invoice-archival.pdf';
    Pdf.PDFACompliance := 'B';            // level B: visual fidelity
    Pdf.Lang := 'en-US';
    Pdf.StandardFontEmulation := False;   // embed real fonts, no Base-14 emulation
    ICC := TFileStream.Create('sRGB.icc', fmOpenRead);
    try
      Pdf.AddPDFAOutputIntent('sRGB IEC61966-2.1', '', ICC, 3, 'DeviceRGB');
    finally
      ICC.Free;
    end;
    Pdf.BeginDoc;
    Pdf.CurrentPage.SetFont('Arial', [], 11);
    Pdf.CurrentPage.TextOut(50, 760, 0, 'Archival invoice body');
    Pdf.EndDoc;
  finally
    Pdf.Free;
  end;
end;
Pdf.PDFXCompliance := 'X-1a';
Pdf.Trapped := 'Unknown';        // mandatory key under ISO 15930
ICC := TFileStream.Create('FOGRA39.icc', fmOpenRead);
try
  Pdf.AddPDFXOutputIntent('FOGRA39 (ISO 12647-2:2004)', '', ICC, 4, 'DeviceCMYK');
finally
  ICC.Free;
end;
Pdf.BeginDoc;
// draw with CMYK-safe colors, no transparency, no encryption
Pdf.EndDoc;
Pdf.PDFUACompliance := True;     // auto-enables tagged PDF
Pdf.Lang := 'en-US';             // set explicitly; empty falls back to 'en'
Pdf.BeginDoc;

Root := Pdf.AddStructureElement(sstDocument, nil);
H1 := Pdf.EmitTaggedHeading(1, Root, 50, 700, 'Quarterly Report');
Para := Pdf.BeginTaggedContent('P', Root);
Pdf.CurrentPage.TextOut(50, 650, 0, 'Revenue grew in all regions.');
Pdf.EndTaggedContent;

Pdf.EndDoc;

Kontrola před vydáním

Výstupní soubor ověřte stejnými nástroji, jaké použije zákazník nebo archiv. Zaznamenejte verzi komponenty, testovací data, verzi validátoru a pozorovaný výsledek, aby šla pozdější regrese přesně dohledat

Doplňující technický rozbor

Tento rozšířený oddíl navazuje na článek Technický článek: PDF/A, PDF/X, and PDF/UA Output in Delphi: HotPDF Guide v češtině a záměrně rozebírá stejný pracovní tok z pohledu týmu, který potřebuje mít jistotu, že rozhodnutí v generátoru, validátoru i v provozním logu zůstanou dohledatelné i po delší době. Anglický základ na navazující stránce přes hreflang ukazuje, proč není dostačující jen přeložit nadpisy; důležité je rozvést důvody, proč se má soubor považovat za hotový až ve chvíli, kdy jsou pravidla, výstup i kontrolní záznamy skutečně sladěné

U implementačních článků je klíčové oddělit návrh od ověření. Nejprve se určí typ souboru, očekávané chování a chyba, která má být vidět, potom se každé API volání sváže s výsledkem, který lze ověřit ve stejném scénáři znovu. To je praktické u PDF i tabulkových procesorů: kódové ukázky zůstávají beze změny, ale okolní text musí vysvětlit, proč se má logovat verze komponenty, identifikace šablony, vstupní data a stav validace spolu

Stejně důležité je zachovat pojmenování produktů, API, souborů a literálových hodnot přesně tak, jak se objevují v anglickém zdroji. Tím se drží společný referenční rámec pro vývoj, support i kontrolu kvality a zmenšuje se riziko, že by se z lokální verze stala jen volná parafráze bez konkrétního technického obsahu. Pokud je v článku uveden kód, jeho komentáře i tokeny mají zůstat nedotčené, protože právě ty spojují text s reálným projektem

Při čtení této stránky je užitečné přemýšlet i o tom, jak bude článek použit po zveřejnění. Dobrá validační poznámka popíše, co se testovalo, jaký nástroj vyhodnotil výsledek, které verze byly zapojené a kde je uložený důkaz o shodě nebo o selhání. Když později vznikne regresní problém, archivovaný report a související vstupní soubor jsou mnohem cennější než samotný dojem, že „to tehdy prošlo“.

Pro tuto lokalizovanou větev tedy platí jednoduché pravidlo: udržet hlavní rozhodnutí, ověřovací body a kontext kódu pohromadě tak, aby článek zůstal použitelný nejen při prvním čtení, ale i při pozdějším ladění, auditu a porovnání mezi verzemi. To je rozdíl mezi krátkým shrnutím a pracovním dokumentem, který má hodnotu i po několika releasích.

  • Nejprve použijte malé reprodukovatelné vstupní soubory
  • Názvy produktů, API, souborů a literálové hodnoty ponechte beze změny
  • Ukládejte verzi komponenty, výsledky validátoru i vstupní data společně
  • Kódové bloky a jejich komentáře zachovejte přesně tak, jak jsou ve zdroji

Související čtení