PDF/E-1 je arhivski profil za inženjerske dokumente, i PDFlibPas ga implementira kao author mode koji uključujete sa SetPDFEMode plus ograničenim preflight-om koji čita content stream-ove operator po operator. Profil nije PDF/A sa drugom nalepnicom: ima svoj identifikacioni namespace, svoj zahtev za metapodatke životnog ciklusa i jedno pravilo koje čini validaciju sadržaja strožom nego u bilo kom arhivskom profilu koji ste do sada sreli
Inženjerski isporučljivi rezultati su razlog postojanja ovog profila. Zbirka crteža koja mora biti čitljiva i dokazano nepromenjena i za dvadeset godina, sa istorijom revizija koja preživi, i sa bojama koje znače isto na ploteru u drugoj zgradi. Ti zahtevi proizvode specifikaciju čije se tražbe nalaze uglavnom van sadržaja strane, u metapodacima i upravljanju bojama, i upravo tamo generički PDF pisac pogrešava
Sopstvena identifikacija, ne varijacija na PDF/A
Prvo što treba uklopiti je da se PDF/E-1 identifikacija ne može proizvesti prilagođavanjem PDF/A ili PDF/X obrasca. Koristi poseban XMP namespace, http://www.aim.org/pdfe/ns/id/, i vrednost verzije mora da se pojavi na dva mesta: kao stavka u document information-u i kao namespace-qualified XMP svojstvo. Emitovanje samo XMP svojstva, ili samo information stavke, proizvodi datoteku koja nosi nameru a pada na validaciji
Output intent ima jednako specifičan oblik. PDF/E-1 zahteva ugrađen ICC profil sa podtip identifikatorom ISO_PDFE1, i profil mora imati broj komponenti koji se poklapa sa familijom boja uređaja koju dokument stvarno koristi. Poslednja klauzula je mesto gde implementacije tiho pogrešavaju, jer ona znači da intent ne može biti izabran unapred i zatim zaboravljen
Zašto boje uređaja treba pretragu celog dokumenta?
Zato što se color space-ovi kriju u resource rečnicima do kojih sken na nivou strane nikada ne dopire. PDF/E-1 tretira DeviceRGB i DeviceCMYK kao međusobno isključive familije za jedan dokument, pa validacija profila znači poznavanje svakog device color space-a koji bilo šta u datoteci koristi. Form XObject ima svoje resurse. Isto važi za pattern, i isto za sliku. Tiling pattern unutar form XObject-a unutar strane je tri nivoa duboko, i validator koji proverava samo resurse najvišeg nivoa strane propustiće dokument koji koristi obe familije
Pretraga zato evidentira color space-ove dok prolazi kroz strane, forme, slike i pattern-e kao jedan obilazak, i tek onda odlučuje da li je dokument koherentan i da li output intent odgovara. Isto razmišljanje pokreće i celu arhitekturu preflight-a: delimičan obilazak proizvodi lažne prolaze, a lažan prolaz na proveri usaglašenosti je gori od nijedne provere, jer se belež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 metapodatke životnog ciklusa usklađenim pri svakom čuvanju.
// Pitaj pre čuvanja da li bi dokument prošao svoju kapiju
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;
Metapodaci životnog ciklusa su obaveza pri svakom čuvanju
PDF/E-1 traži više od identifikatora dokumenta. Minimalni skup uključuje media management identifikator dokumenta, identifikator verzije, rendition klasu, vreme nastanka, vreme izmene, vreme metadata-a i naslov. To je vokabular za praćenje revizija, i postoji jer se od inženjerskog isporučljivog rezultata očekuje da bude ponovo izdat, a ne da bude napisan jednom
Posledica po implementaciju je da ta polja ne mogu biti postavljena pri stvaranju dokumenta. Ako se vreme izmene upiše kad uključite režim, a dokument se posle uređuje, XMP snimak i stvarno stanje dokumenta su se razbežali, i validator koji ih poredi prijavljuje nekonzistentnost koju niko nije nameravao. Author mode zato sinhronizuje polja neposredno pre svakog čuvanja, tako da metapodaci opisuju bajtove koji tek treba da se upišu, a ne bajtove koji su postojali kad je režim uključen
To je opšti princip za conformance metapodatke i vredi ga izdvojiti od PDF/E-a: izvedeni metapodaci pripadaju putanji čuvanja, a ne putanji uređivanja. Svako polje izračunato iz stanja dokumenta mora se ponovo izračunati u trenutku kad se stanje zamrzne, ili je keš bez poništavanja
Pravilo koje čini validaciju sadržaja strogom
PDF/E-1 ne dopušta da operatori compatibility sekcije upiju nepoznat sadržaj. U običnom PDF-u, BX i EX ograđuju region u kojem potrošač mora da ignoriše operatore koje ne prepoznaje, i to je beg koji proizvođaču dopušta da emituje novije konstrukcije ne lomivši starije čitače. Pod PDF/E-1 tim begom je zatvoren, pa svaki operator koji preflight ne prepoznaje prijavljuje se bezuslovno, bio on unutar compatibility sekcije ili ne
Efekat po validatora je značajan. Ne može da preskoči regione koje ne razume, što znači da parser operanada stvarno mora da raščlani svaki operator u svakom content stream-u. Tu nastupaju granice. Obilazak je ograničen na 128 nivoa ugnježđivanja, milion objekata i 64 MiB sadržaja, i ta ograničenja niju štelovanje performansi. Neprijateljski ili samo pokvarena datoteka može da prikaže graf objekata sa ciklusima ili dubinu ugnježđivanja koja od rekurzivnog validatora pravi stack overflow, i ograničenja su ono što sprečava da validacioni prolaz postane vektor denial-of-service napada. Isti odbrambeni stav opisan je u članku o bezbednom raščlanjivanju nepouzdanih PDF-ova
// Samostalna validacija datoteke koju niste vi 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;
Šta kapija pri čuvanju popravlja, a šta odbija
Kapija deli svoj posao na dve faze, i ta podela je upotrebljiva dizajnerska ideja i sama za sebe. Prvo normalizuje ono što se bezbedno može popraviti: print zastavice anotacija, no-zoom i no-rotate zastavice na tekst anotacijama i appearance-generation zastavicu na form rečniku. To su podešavanja sa jednom ispravnom vrednošću pod profilom i bez ijednog sadržaja informacije, pa ih je tiho popraviti ispravno, a odbiti zbog njih bila bi pedanterija
Zatim proverava ograničenja koja se ne mogu popraviti a da se ne promeni ono što dokument znači: verzija, identifikacija, enkripcija, output intent, koherentnost boja uređaja i prisustvo dinamičkog form sadržaja. Dokument koji padne na bilo kojem od tih se odbija, jer bi izmišljanje output intent-a ili biranje familije boja u ime autora proizvelo datoteku koja prolazi validaciju a krivo prikazuje sadržaj
Čitanje dijagnostike kroz GetPDFEDiagnostics pre čuvanja pretvara to odbijanje u spisak sa kojim se može nešto uraditi, a ne u pao operaciju. U batch pipeline-u, pozovite je nad svakim dokumentom, logujte prepreke po datoteci i usmerite padove u red koji čovek pregleda. To je daleko korisnije od čuvanja koje baca izuzetak, jer se prepreke obično gomilaju: četrdeset dokumenata koji padaju na isti nedostajući output intent je jedna popravka, ne četrdeset
Izbor između arhivskih profila
PDF/E-1 je prava meta kad je isporučljivi rezultat inženjerska dokumentacija sa životnim ciklusom revizija, i konkretno kad koherentnost boja uređaja znači, jer izlaz ide na plotere i printere velikog formata. PDF/A je prava meta kad je cilj dugoročna čitljivost dokumenata uopšte, i to je profil sa najširom podrškom validatora. Ta dva nisu zamenljiva, i dokument može zadovoljiti jedan a pasti na drugom
Ako birate, krenite od toga ko na kraju lanca validira datoteku. PDF/A validaciona alatka je svuda, i odgovarajući preflight u PDFlibPas-u opisan je u PDF/A i PDF/UA preflight-u. PDF/E validacija je specijalizovanija i obično je ugovoren zahtev, a ne podrazumevana. Kad postojeću arhivu treba dovesti do profila za koji nikada nije pisana, putanja popravke metapodataka iz konverzije u PDF/A uz popravku metapodataka je obrazac koji treba pratiti, i isti oblik važi i ovde: identifikuj, popravi ono što je bezbedno, ostalo odbi sa spiskom
Author mode, ograničeni content preflight i samostalna compliance provera stižu uz PDFlibPas Delphi PDF biblioteku, tako da dokument može biti proizveden pod profilom i nezavisno proveren posle kroz odvojen kodni put, a to je jedini aranžman vredan poverenja kad je conformance tvrdnja u pitanju