Műszaki cikk

PDF/A, PDF/X és PDF/UA-kimenet Delphi-ben: HotPDF útmutató

Ez a magyar cikk a(z) PDF/A, PDF/X és PDF/UA-kimenet Delphi-ben: HotPDF útmutató témát foglalja össze olyan csapatoknak, amelyek Delphi, C++Builder, Lazarus/FPC és losLab komponensek köré építenek üzleti megoldásokat

A hangsúly a gyakorlati döntéseken, a buktatókon és az ellenőrzési pontokon van, hogy a megoldás éles környezetben is megbízható legyen

Mikor hasznos ez a téma

A téma akkor fontos, amikor a dokumentumkezelésnek éles környezetben is ismételhetőnek, mérhetőnek és támogatásbarátnak kell lennie, nem csak egy bemutatóprojektben.

  • Rögzítse a bemeneti fájlokat, jogosultságokat, várt kimenetet és hibautakat
  • A terméknevek, API-nevek és fájlnevek maradjanak pontosan az eredeti alakjukban
  • Őrizzen meg rövid regressziós fájlokat és naplókat a későbbi támogatáshoz

Gyakorlati munkafolyamat

Az angol forrás fő pontjai alapján érdemes a megvalósítást áttekinthető Delphi-munkafolyamattá alakítani. A forrás kiemelt témái:

  • Három ISO-szabvány, három különböző ígéret
  • PDF/A a HotPDF-ben: az OutputIntent a lényeg
  • PDF/X nyomtatáshoz: Trapped, CMYK és a nyomdai profil
  • PDF/UA: a szerkezetet létre kell hozni, nem utólag pótolni
  • Ellenőrzés: a validatornak higgyen, ne a megjelenítőnek
  • GYIK

Először egy kisméretű, reprodukálható példát készítsen, majd ehhez kapcsolja a komponenshívásokat, a hibakezelést és a felhasználói üzeneteket. A dokumentumformátumoknál a részletek döntik el, hogy a megoldás megbízható-e.

API- és kódhorgonyok

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;

Ellenőrzés kiadás előtt

Kiadás előtt ellenőrizze a kimeneti fájlt, a metaadatokat, a titkosítást, a renderelést vagy az importált állapotot, a cikk témájának megfelelően. Jegyezze fel az eszközverziót, a komponensverziót, a tesztfájlt és a megfigyelt eredményt.

A terméknevek, API-nevek és kódrészletek változatlanok maradnak, hogy a fejlesztők könnyen összevethessék őket a dokumentációval és a forráskóddal

Kapcsolódó olvasnivaló

További kódpéldák

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;

Kiegészítő megjegyzések

Ez a kiegészítés a rövid verziót egy használhatóbb munkalappá bővíti, miközben továbbra is illeszkedik a PDF/A, PDF/X, and PDF/UA Output in Delphi: a HotPDF Guide és az angol alapcikk technikai keretéhez. A szövegnek világosan meg kell mutatnia, milyen bemenettől indul a téma, milyen kimenet a cél, és melyik ellenőrzési ponton kell a viselkedést visszaigazolni.

Az átdolgozásnál a döntési sorrend számít: először az adat alakja, utána a módosítás határa, majd az API-függőségek, végül a tényleges viselkedés. Ha a cikk több lehetőséget említ, érdemes azt is leírni, melyik út védhetőbb karbantartás, támogatás és hibareprodukció szempontjából.

Minden code block, fájlnév, API-név és literal érték maradjon változatlan. A környező magyarázat lehet részletesebb, de a példakódnak ugyanazt a pontos referenciát kell adnia, hogy az olvasó közvetlenül összevesse a saját Delphi-, C++Builder- vagy Lazarus/FPC-projektjével.

A validation részben szerepeljen kis mintaállomány, kimenet-összevetés, valamint component- vagy validator-verzió rögzítése. Ha bug fixről vagy migrációról van szó, a reprodukciós útvonalat, az első megfigyelt állapotot és az ellenőrzési pontot is világosan kell leírni, hogy a regression később ne találgatás legyen.

Az ilyen bővítés azért hasznos, mert a lap nem csak első olvasásra marad értelmezhető: reviewernek döntési háttér, supportnak vizsgálati kontextus, a karbantartó csapatnak pedig hivatkozható megjegyzés lesz a következő módosítások előtt.

  • A termék-, API-, fájl- és literal neveket ne módosítsd
  • A code blockot, ha van, hagyd érintetlenül
  • A validationhez adj mintafájlt és összevethető kimenetet
  • A döntési sorrendet ne csak röviden, hanem érthetően írd le