PDF/E-1 je arhivski profil za inženjerske dokumente, i PDFlibPas ga implementira kao author mode koji uključujete s SetPDFEMode plus ograničeni preflight koji čita content streamove operator po operator. Profil nije PDF/A s drugom etiketom: ima vlastiti identification namespace, vlastiti zahtjev za lifecycle metadata i jedno pravilo koje čini validaciju sadržaja strožom nego u bilo kojem arhivskom profilu koji ste dosad sreli
Inženjerski isporučivi materijali su razlog postojanja profila. Skup nacrta koji mora biti čitljiv i dokazivo nepromijenjen za dvadeset godina, uz povijest revizija koja preživi, i uz boju koja znači isto na ploteru u drugoj zgradi. Ti zahtjevi proizvode specifikaciju čiji se zahtjevi većinom nalaze izvan sadržaja stranice, u metadati i upravljanju bojom, i upravo tamo generički PDF writer pogriješi
Vlastita identifikacija, ne varijacija na PDF/A
Prvo što treba shvatiti je da se PDF/E-1 identifikacija ne može proizvesti prilagodbom PDF/A ili PDF/X obrasca. Koristi poseban XMP namespace, http://www.aim.org/pdfe/ns/id/, i vrijednost verzije mora se pojaviti na dva mjesta: kao unos u document information i kao namespace-kvalificirano XMP svojstvo. Ispisivanje samo XMP svojstva, ili samo information unosa, proizvodi datoteku koja nosi namjeru i pada na validaciji
Output intent ima jednako specifičan oblik. PDF/E-1 zahtijeva ugrađeni ICC profil s identifikatorom podtipa ISO_PDFE1, i profil mora imati broj komponenti koji se poklapa s device color familijom koju dokument stvarno koristi. Ta posljednja klauzula je mjesto gdje implementacije tiho pogriješe, jer znači da se intent ne može odabrati unaprijed i zatim zaboraviti
Zašto device color treba pretragu cijelog dokumenta?
Zato se color prostori skrivaju u resource rječnicima do kojih skeniranje na razini stranice nikad ne dođe. PDF/E-1 tretira DeviceRGB i DeviceCMYK kao međusobno isključive familije za jedan dokument, pa validacija profila znači znati svaki device color space koji išta u datoteci koristi. Form XObject ima svoje resurse. Isto tako pattern, i isto tako slika. Tiling pattern unutar form XObjecta unutar stranice je tri razine duboko, i validator koji provjerava samo resurse najviše razine stranice prolavit će dokument koji koristi obje familije
Pretraga stoga registrira color prostore dok prolazi stranice, forme, slike i patterne kao jedan obilazak, i tek onda odlučuje je li dokument koherentan i odgovara li output intent. Isti razlog pokreće i preflight arhitekturu općenito: djelomični obilazak proizvodi lažne prolaze, a lažan prolaz na conformance provjeri je gori nego nikakva provjera, jer se bilježi kao dokaz
var
Lib: TPDFlib;
Diag: WideString;
begin
Lib := TPDFlib.Create(nil);
try
Lib.LoadFromFile('assembly-drawings.pdf');
if Lib.SetPDFEMode(1) = 0 then
raise Exception.Create('PDF/E author mode was refused');
// Author mode drži lifecycle metadata usklađenom pri svakom
// spremanju. Pitajte prije spremanja prođe li dokument svoj gate
if not Lib.PDFEReadyForSave then
begin
Diag := Lib.GetPDFEDiagnostics;
Writeln('PDF/E blockers: ', Diag);
Exit;
end;
Lib.SaveToFile('assembly-drawings-pdfe.pdf');
finally
Lib.Free;
end;
end;
Lifecycle metadata je obveza pri svakom spremanju
PDF/E-1 traži više od identifikatora dokumenta. Minimalni skup uključuje media management identifikator dokumenta, identifikator verzije, rendition klasu, vrijeme stvaranja, vrijeme izmjene, vrijeme metadate i naslov. To je vokabular za praćenje revizija, i postoji jer se od inženjerskog isporučivog materijala očekuje da će biti ponovno izdan, a ne napisan jednom
Posljedica za implementaciju je da se ta polja ne mogu postaviti pri stvaranju dokumenta. Ako je vrijeme izmjene upisano kad ste uključili mod, a dokument je potom uređivan, XMP snapshot i stvarno stanje dokumenta su se razdvojili, i validator koji ih uspoređuje javlja nekonzistentnost koju nitko nije htio. Author mode stoga sinkronizira polja neposredno prije svakog spremanja, pa metadata opisuje bajtove koji tek trebaju biti upisani, a ne bajtove koji su postojali kad je mod uključen
To je općenito načelo za conformance metadata i vrijedi ga izreći odvojeno od PDF/E-a: izvedena metadata pripada putu spremanja, a ne putu uređivanja. Svako polje izračunato iz stanja dokumenta mora se ponovno izračunati u trenutku kada se stanje zamrzne, ili je cache bez invalidacije
Pravilo koje čini validaciju sadržaja strogom
PDF/E-1 ne dopušta da operatori compatibility sekcije upiju nepoznati sadržaj. U običnom PDF-u, BX i EX okružuju regiju u kojoj potrošač mora ignorirati operatore koje ne prepoznaje, i to je escape hatch koji proizvođaču omogućuje da emitira novije konstrukcije ne slamanjem starijih čitača. Pod PDF/E-1 taj je izlaz zatvoren, pa se svaki operator koji preflight ne prepozna javlja bezuvjetno, bilo unutar compatibility sekcije ili ne
Učinak na validator je značajan. Ne može preskočiti regije koje ne razumije, što znači da operand parser mora stvarno parsirati svaki operator u svakom content streamu. Tu na scenu stupa ograničavanje. Obilazak je ograničen na 128 razina ugniježđivanja, milijun objekata i 64 MiB sadržaja, i ta ograničenja nisu podešavanje performansi. Neprijateljska ili samo oštećena datoteka može prikazati graf objekata s ciklusima ili dubinom ugniježđivanja koja rekurzivni validator pretvori u stack overflow, i ograničenja su ono što sprječava da prolaz validacije postane denial-of-service vektor. Isti defanzivni pristup opisan je u sigurnom parsiranju nepouzdanih PDF-ova
// Neovisna validacija datoteke koju niste proizveli, bez učitavanja
// u instancu dokumenta
var
Issues: TStringList;
Stream: TFileStream;
I: Integer;
begin
Issues := TStringList.Create;
Stream := TFileStream.Create('incoming.pdf', fmOpenRead or fmShareDenyWrite);
try
if CheckCompliancePDFE(Stream, '', 0, Issues) = 0 then
for I := 0 to Issues.Count - 1 do
Writeln('PDF/E: ', Issues[I]);
finally
Stream.Free;
Issues.Free;
end;
end;
Što save gate popravlja a što odbija
Gate dijeli svoj rad u dvije faze, i ta je podjela upotrebljiva dizajnerska ideja i sama za sebe. Prvo normalizira stvari koje je sigurno popraviti: print zastavice anotacija, no-zoom i no-rotate zastavice na tekstnim anotacijama, i appearance-generation zastavicu na rječniku forme. To su postavke s jednom ispravnom vrijednošću pod profilom i bez informativnog sadržaja, pa ih je tiho popraviti ispravno, a odbijati zbog njih bila bi pedanterija
Zatim provjerava ograničenja koja se ne mogu popraviti bez mijenjanja onoga što dokument znači: verziju, identifikaciju, enkripciju, output intent, coherentnost device colora i prisutnost dinamičkog sadržaja forme. Dokument koji pada na bilo kojem od njih se odbija, jer bi izmišljanje output intenta ili odabir color familije u ime autora proizvelo datoteku koja prolazi validaciju a krivo prikazuje sadržaj
Čitanje dijagnostike nazad kroz GetPDFEDiagnostics prije spremanja pretvara to odbijanje u listu na kojoj se može djelovati, umjesto u operaciju koja je pala. U batch pipelineu, pozovite je na svakom dokumentu, logirajte blockere po datoteci, i usmjerite padove u red kojeg čovjek pregledava. To je daleko korisnije od spremanja koje baca iznimku, jer se blocker obično grupiraju: četrdeset dokumenata koji padaju na istom nedostajućem output intentu je jedan popravak, ne četrdeset
Odabir između arhivskih profila
PDF/E-1 je pravi cilj kada je isporučivi materijal inženjerska dokumentacija s revizijskim životnim ciklusom, i osobito kada je coherentnost device colora bitna jer izlaz ide na plotere i printere velikog formata. PDF/A je pravi cilj kada je cilj dugoročna čitljivost dokumenata općenito, i to je profil s najšrom podrškom validatora. Ta dva nisu zamjenjiva, i dokument može zadovoljiti jedan a pasti na drugom
Ako birate, krenite od toga tko validira datoteku na kraju lanca. PDF/A validacijski alati su posvuda, a odgovarajući preflight u PDFlibPasu opisan je u PDF/A i PDF/UA preflightu. PDF/E validacija je specijaliziranija i obično je ugovorni zahtjev, a ne zadano ponašanje. Kad postojeći arhiv treba dovesti do profila za koji nikad nije pisan, put popravka metadate u pretvorbi u PDF/A s popravkom metadate je obrazac kojeg treba slijediti, i isti oblik vrijedi ovdje: identificiraj, popravi što je sigurno, odbij ostalo s popisom
Author mode, ograničeni content preflight i neovisna compliance provjera svi dolaze uz PDFlibPas Delphi PDF biblioteku, pa dokument može biti proizveden pod profilom i neovisno verificiran poslije kroz odvojeni kodni put, što je jedini aranžman vrijedan povjerenja za conformance tvrdnju