PDF/A, PDF/X ja PDF/UA ovat kolme eri standardia kolmeen eri ongelmaan: pitkäaikaisarkistointiin, painotuotannon tiedostonsiirtoon ja saavutettavuuteen. Ne eivät ole yhden vaatimustenmukaisuuslomakkeen kolme valintaruutua. Moitteeton PDF/A voi olla painolle hyödytön, ja täydellinen painoaineisto voi olla ruudunlukijalle lukukelvoton. Kaikki kolme rajoittavat tiedoston sisäistä rakennetta, eivät ulkoasua. Jokaisessa katseluohjelmassa avautuva tiedosto voi silti epäonnistua ensimmäisessä validoinnissa
HotPDF, losLabin natiivi VCL PDF library, käsittelee vaatimustenmukaisuutta määrityksenä, joka tehdään ennen ensimmäistä sivua. Compliance-ominaisuus asetetaan, standardin vaatimat rakenteet liitetään ja kirjasto torjuu profiilin kanssa ristiriitaiset määritykset tallennusvaiheessa. Malli on luotettavampi kuin jälkikäsittely, koska useimpia vaadittuja rakenteita ei voi lisätä tiedoston valmistuttua
Kolme ISO-standardia, kolme eri lupausta
PDF/A (ISO 19005) koskee aikaa. Sen on renderöidyttävä samalla tavalla vuosikymmenten kuluttua, joten tiedoston on oltava itsenäinen: kaikki fontit upotetaan, jokaiselle värille annetaan laiteriippumaton merkitys OutputIntent-rakenteella, XMP-metadata on täydellinen ja ympäristöstä riippuvat ominaisuudet kielletään. Salaus ja JavaScript eivät ole sallittuja, koska purkuohjelman tai komentosarjamoottorin olemassaoloa vuonna 2050 ei voi taata
PDF/X (ISO 15930) koskee väriä paperilla. Se määrittää paino-olosuhteet, pakollisen /Trapped-avaimen, trim- ja bleed-geometrian sekä X-1a-versiossa kiellon live transparency -sisällölle. PDF/UA (ISO 14289) koskee lukijaa: avustava teknologia tarvitsee täydellisen tag tree -rakenteen, järkevän lukemisjärjestyksen, määritetyn asiakirjakielen ja tekstivastineet muulle kuin tekstisisällölle
Valitse hallitseva standardi tulostuskanavan mukaan sen sijaan, että yrittäisit täyttää kaikki yhdellä tiedostolla. CMYK-only-painoaineisto on väärä toimitus ruudunlukijan käyttäjälle, ja arkistoprofiilin dynaamisen toiminnan rajoitukset törmäävät interaktiivisuuteen. Tuota samasta lähdedatasta oma tiedosto kullekin kanavalle
PDF/A: OutputIntent unohtuu helpoimmin
Kun PDF/A-validointi epäonnistuu, tarkista ensin OutputIntent. Generaattorit ohittavat sen usein, koska se ei muuta näkyvää tulosta. ISO 19005 vaatii upotetun ICC-profiilin, joka määrittää laitevärien merkityksen. HotPDF ottaa profiilin nimenomaisena syötteenä:
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;
StandardFontEmulation-arvon on oltava pois käytöstä, koska emuloituja Base-14-fontteja ei upoteta ja ISO 19005 vaatii upotuksen. Salaus on pidettävä poissa käytöstä: älä yhdistä PDFACompliance- ja ActivateProtection-ominaisuuksia. AddPDFAOutputIntent-kutsun komponenttimäärän on vastattava profiilia: RGB-profiilille kuten sRGB IEC61966-2.1 arvo on 3 ja CMYK-profiilille 4. HotPDF vertaa kirjoituksen aikana DeviceRGB- ja DeviceCMYK-käyttöä määritettyyn intent-rakenteeseen, joten RGB-asiakirjaan eksynyt CMYK-täyttö raportoidaan
Käsittele ICC-profiilia versioituna käyttöönottoartefaktina. Sen tavut upotetaan jokaiseen tiedostoon, joten katkennut tai vioittunut profiili pilaa koko erän ja näkyy vasta validoinnissa. Toimita profiili installer-paketissa, kirjaa sen checksum ajolokiin ja lataa se esimerkin TFileStream-mallilla, jotta puuttuva tiedosto aiheuttaa näkyvän virheen generoinnin aikana
PDF/X painoon: Trapped, CMYK ja painoprofiili
Painoaineisto tarvitsee määritellyn CMYK-väriavaruuden ja tiedon trapping-käsittelystä, vaikka rehellinen vastaus olisi tuntematon. /Trapped-avain on aina pakollinen:
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;
CMYK-painoprofiilin komponenttimäärä on 4. X-1a kieltää live transparency -sisällön, joten läpikuultavia elementtejä kerrostava piirustuskoodi on tarkastettava; näytöllä yhdistyvä sisältö voi jäädä RIP-järjestelmältä käsittelemättä. Kun paino toimittaa uuden karakterisoinnin, vaihda profiilin tavut ja tunniste mutta säilytä ympäröivä rakenne
PDF/UA: rakenne luodaan, sitä ei lisätä jälkikäteen
Tag tree -rakenteen on vastattava sisällön loogista luontijärjestystä, jota ei enää voi päätellä luotettavasti valmiista tiedostosta. PDFUACompliance ottaa tagged output -tulostuksen käyttöön, ja rakennerajapinta sitoo jokaisen piirto-operaation semanttiseen rooliin:
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;
Varo tekstiä, joka piirretään BeginTaggedContent/EndTaggedContent-parin ulkopuolella. Se näkyy oikein mutta jää ruudunlukijalta näkymättömäksi. Mukautetut rakenneroolit mapataan standardirooleihin esimerkiksi kutsulla AddStructRoleMap('MyHead', 'H1'). ISO 14289 vaatii myös asiakirjan kielen. HotPDF käyttää 'en'-arvoa, jos Lang on tyhjä, mutta oikea kieli pitää silti määrittää
Validointi: luota validaattoriin, älä katseluohjelmaan
Tiedoston avautuminen ei todista vaatimustenmukaisuutta. PDF/A- ja PDF/UA-tiedostoille veraPDF on avoin viitetason validaattori, joka raportoi virheet ISO-kohtien mukaan. PDF/X-tiedostoille Adobe Acrobatin Preflight-profiilit ovat käytännöllinen tarkistus, koska painovaatimukset koskevat syntaksin lisäksi väriaikomusta
Tallennuksessa HotPDF sovittaa feature flags -arvot määritettyyn PDF-versioon ja alentaa version ylittävän ominaisuuden, esimerkiksi AES-256:n AES-128:ksi PDF 1.7:ää vanhemmassa versiossa. EndDoc-kutsun compliance gates nostavat virheen kovista ristiriidoista, kuten PDFACompliance-asetuksen yhdistämisestä salaukseen. Kumpikaan ei korvaa ulkoista validaattoria
Versioi koko compliance-määritys yhtenä kokonaisuutena: HotPDF release, template revision, ICC profile checksum ja hyväksyneen validator build. Yhden osan vaihtuminen voi muuttaa tulosta, ja eräkohtainen määritystietue mahdollistaa vuosia vanhan arkistotiedoston tuottaneen yhdistelmän jäljittämisen
Validoi todellinen tuotantotulos, ei siistiä käsin rakennettua näytettä. Ongelmat tulevat odottamattomasta datasta: CMYK-asiakaslogo RGB-intent-asiakirjassa, upottamaton fontti template-muutoksessa tai tag tree -rakenteen ulkopuolelle piirretty teksti. Säilytä yksi tunnetusti virheellinen tiedosto jokaisesta aiemmasta tapauksesta regressiosyötteenä. Renderöintipuolta käsittelee HotPDF-raporttien fontteja ja kuvia koskeva artikkeli, ja validaattorien build-integraatiota PDF-esitarkistusten automatisointia koskeva artikkeli
Esimerkkien compliance properties, output intents ja tagging API sisältyvät Delphin ja C++Builderin HotPDF Component -tuotteeseen. Tuotesivulla on kaikkien tässä käytettyjen kutsujen viite