ConvertToPDFA spremeni običajen dokument v arhivskega v enem klicu: odstrani tisto, kar izbrani del prepoveduje, doda tisto, kar del zahteva, navede del, ki ga dokument zahteva, nato preveri rezultat. Zahteva je poročana kot izpolnjena šele, ko preverjanje uspe, GetPDFAConversionReport pa našteje, kaj je bilo storjeno in kaj še stoji na poti
Ta zadnja lastnost je oblikovna odločitev, ki se ji splača posvetiti. Pretvornik, ki žigosanost zahteve nalepi brez preverjanja, je slabši od nobenega pretvornika, ker datoteka, ki pravi, da je arhivska, pa ni, gre naravnost skozi tiste sisteme, ki bi jo sicer ujeli. Napaka se pokaže leta pozneje, v reviziji, na dokumentu, ki ga nihče ne more znova ustvariti
Zakaj veljavno videči PDF ne uspe preverjanju PDF/A?
Najpogosteje zato, ker se kraji, v katerih PDF pove, kdo ga je napisal, ne strinjata. Validator prebere tako slovar informacij dokumenta kot paket XMP in zavrne datoteko, kjer se razlikujeta — datoteke, ki pri tem ne uspejo, pa preprosto sploh niso imele zapisane polovice XMP
RepairDocumentMetadata ju spravi v soglasje in vrne, koliko vnosov je popravil. Kjer vrednost nosi samo ena polovica, se druga zapolni iz nje, tako da nič že zapisanega ne vržemo proč. Nihče se ne mora odločiti, katera kopija je avtoritativna, ker je v praksi ena kopija prazna
V istem klicu je drugo popravilo, ki ujame tanjši primer. Dokumentu, nastavljenemu na način PDF/A, se obnovi identifikacija standarda, če je bila izgubljena, kar se zgodi kadarkoli klicatelj dobavi svoj paket XMP. Brez te identifikacije validator datoteko prebere kot običajen PDF in vsako pravilo zahtevanega dela poroča kot neizpolnjeno — spektakularno videče se neuspeh z enim majhnim vzrokom
var
Lib: TPDFlib;
Repaired: Integer;
begin
Lib := TPDFlib.Create;
try
Lib.LoadFromFile('incoming.pdf', '');
Repaired := Lib.RepairDocumentMetadata;
Log(Format('%d metadata entries brought into agreement', [Repaired]));
Lib.SaveToFile('incoming-fixed.pdf');
finally
Lib.Free;
end;
end;
Izbira dela pred pretvorbo
SetPDFAMode in ConvertToPDFA si delita isto oštevilčenje načinov, tri od vrednosti pa so novejše. Način 9 je PDF/A-4, del, zgrajen na PDF 2.0. Način 10 je PDF/A-4e, ki dodatno dovoljuje 3D in bogate medije, način 11 pa je PDF/A-4f, ki dovoljuje vdelano datoteko kateregakoli formata
Del 4 se identificira drugače kot deli pred njim: s številko dela in letom, v katerem je bil objavljen, brez črke skladnosti za navadni PDF/A-4, s črko E ali F pa za razširitvi. Preverjanje prepozna del 4, njegove datoteke presoja glede na PDF 2.0 in ne 1.7, ter poroča o datoteki dela 4, ki ne navede svojega leta revizije
Vsakšna vdelana datoteka v dokumentu dela 4 navede, kako se nanaša na dokument, kot zahtevata dela 3 in 4. To je pravilo, ki je nekoč ujemalo običajne priponke: razmerje je bilo zapisano samo za priponke po prvi in nikoli za zadnjo, tako je dokument z eno samo priponko — običajen primer — ni nosil nobenega in ni uspel pri validaciji ravno na tej točki
var
Verdict: Integer;
begin
Lib.LoadFromFile('report.pdf', '');
Verdict := Lib.ConvertToPDFA(9); // 9 = PDF/A-4, 10 = 4e, 11 = 4f
Memo1.Lines.Text := Lib.GetPDFAConversionReport;
if Verdict = 1 then
Lib.SaveToFile('report-pdfa4.pdf')
else
Log('conversion incomplete - see the report for what stands in the way');
end;
Namenu poročila o pretvorbi
Odločitev, kaj storiti naprej. Uspešna pretvorba ne potrebuje poročila; neuspešna pa je ves razlog, zakaj poročilo obstaja. Nekatere ovire lahko odstrani pretvornik, nekatere pa ne — šifriranje, prepovedana vsebina, ki nosi pomen, program pisave, ki preprosto ni prisoten nikjer na stroju. Poročilo loči, kaj je bilo storjeno, od tega, kaj ostaja, kar "pretvorba ni uspela" spremeni v delovno postavko
Verdikt obravnavajte kot vrata v paketnem cevovodu. Pretvorite, preberite verdikt in usmerite datoteko: arhivirajte tiste, ki so šle skozi, ostale uvrstite v čakalno vrsto za človeka s pripetim poročilom. Česa ne smete storiti, je shraniti izhod neuspele pretvorbe v arhiv, ker je videti lepši od vhoda — zdaj nosi zahtevo, ki jo je preverjanje odklonilo potrditi
Branje žigosanosti, ki jo datoteka že nosi
Pred pretvorbo česarkoli vedite, kaj dokument pravi o sebi. Preverjanje PDF/A, ki ne more prebrati obstoječe oznake standarda, vsako datoteko presoja glede na del 1, karkoli že razglaša, kar pomeni, da se popolnoma veljaven dokument PDF/A-2 ali PDF/A-3 poroča kot brez oznake in kot previsoke različice — nasprotje resnice
Oznaka se prebere, ne glede na to, ali jo je producent zapisal kot element XMP ali kot atribut. Obe obliki sta običajen XMP, sprejemanje samo ene od njiju pusti datoteke drugih producentov videče se neoznačene. Če ste se kdaj vprašali, zakaj dokument, ki se drugje uspešno preveri, v lastnem cevovodu ne uspe, je to dobro mesto, kjer se splača najprej zazreti
Sanitacija pred arhiviranjem in hrošč, ki se splača poznati
Arhivska pretvorba in sanitacija pogosto tečeta skupaj, ker se vsebina, ki jo želi varnostna politika odstranjena, močno prekriva z vsebino, ki jo PDF/A prepoveduje. SanitizeDocument odstrani JavaScript, odstranitev zadnjega skripta pa odstrani tudi prazno drevo imen, ki ga pusti za seboj — drevo, ki bi bralcu sicer še povedalo, da dokument nosi skripte
Ta druga polovica je bila naučena na trdi način: napaka pri ena v seznamu paketov je pomenila, da je sanitacija poročala o odstranitvi skriptov, pri čemer jih ni odstranila, tako da dokument, ki je bil saniran, ob odprtju še vedno zaganja svoje skripte. To je dober argument za splošno načelo, na katerem počiva ves ta članek — preverite rezultat namesto da zaupate operaciji, in sicer tako v lastnem cevovodu kot v knjižnici
Za okoliško arhirsko delo glejte sprehode skozi predlet PDF/A in PDF/UA, pravo redakcijo in odstranitev vsebine ter razširitvene sheme XMP PDF/A-3 za Factur-X, ki obravnava stran metapodatkov, ko arhivirani dokument nosi tudi strukturirane podatke računa
PDFlibPas je izvorna Pascalova knjižnica PDF za Delphi, C++Builder in Lazarus, tako da pretvorba, popravilo in preverjanje tečejo znotraj lastnega procesa brez zunanjega orodja v verigi — glejte stran izdelka PDFlibPas za podprte dele PDF/A in platforme