ConvertToPDFA vienu kvietimu paprastą dokumentą paverčia archyviniu: pašalina tai, ką pasirinkta dalis draudžia, prideda tai, ko dalis reikalauja, nurodo dalį, kurią dokumentas deklaruoja, ir po to patikrina rezultatą. Deklaracija pranešama kaip įvykdyta tik tada, kai patikra praeina, o GetPDFAConversionReport išvardija, kas buvo padaryta ir kas vis dar trukdo
Būtent ši paskutinė savybė yra dizaino sprendimas, vertas apsistoti. Konverteris, kuris antspauduoja deklaraciją netikrinęs, yra blogesnis už jokį konverterį, nes failas, sakantis, kad yra archyvinis, o toks nėra, praeina tiesiai per sistemas, kurios kitu atveju jį būtų pagavusios. Triktis iškyla po metų audite, dokumente, kurio niekas negali iš naujo sugeneruoti
Kodėl tinkamai atrodantis PDF nepraeina PDF/A patikros?
Dažniausiai todėl, kad dvi vietos, kuriose PDF sako, kas jį parašė, nesutampa. Validatorius skaito ir dokumento informacijos žodyną, ir XMP paketą bei atmeta failą, kuriame jie skiriasi — ir dauguma failų, kurie trikiasi šiuo klausimu, tiesiog neturi XMP pusės išvis užrašytos
RepairDocumentMetadata juos sugretina ir grąžina, kiek įrašų pataisė. Kur viena pusė neša reikšmę, kita užpildoma iš jos, todėl niekas jau užregistruota nėra išmetama. Niekam nereikia spręsti, kuri kopija yra patikimą, nes praktikoje viena kopija būna tuščia
Tame pačiame kvietime yra antras taisymas, kuris pagauna subtilesnį atvejį. Dokumentui, nustatytam į PDF/A režimą, atstatoma standartų identifikacija, jei ji buvo prarasta — tai atsitinka kiekvieną kartą, kai kviesiantysis pateikia savo XMP paketą. Be tos identifikacijos validatorius skaito failą kaip paprastą PDF ir praneša kiekvieną deklaruotos dalies taisyklę kaip neįvykdytą — įspūdingai atrodanti triktis su viena maža priežastimi
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;
Dalies parinkimas prieš konvertuojant
SetPDFAMode ir ConvertToPDFA dalijasi tą patį režimų numeraciją, ir trys reikšmės yra naujos. Režimas 9 yra PDF/A-4, dalis, sukurta ant PDF 2.0. Režimas 10 yra PDF/A-4e, kuris papildomai leidžia 3D ir praturtintą mediją, o režimas 11 yra PDF/A-4f, kuris leidžia įterptą failą bet kokiu formatu
4 dalis identifikuoja save kitaip nei dalys prieš ją: pagal dalies numerį ir savo dalies publikavimo metus, be atitikties laiško paprastam PDF/A-4 ir su laišku E arba F dviem plėtiniams. Patikra atpažįsta 4 dalį, vertina jos failus pagal PDF 2.0, o ne 1.7, ir praneša apie 4 dalies failą, kuris nenurodo savo revizijos metų
Kiekvienas įterptas failas 4 dalies dokumente nurodo, kaip jis siejasi su dokumentu, kaip reikalauja tiek 3, tiek 4 dalys. Tai yra taisyklė, kuri anksčiau gaudydavo įprastus priedus: ryšys buvo užrašomas tik priedams po pirmuoju ir niekada paskutiniam, todėl dokumentas su vienu priedu — įprastas atvejis — neturėjo jo išvis ir nepraėjo tikrinimo būtent šiuo klausimu
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;
Kam reikalingas konvertavimo ataskaita
Spręsti, ką daryti toliau. Konvertavimui, kuris pavyksta, ataskaitos nereikia; konvertavimui, kuris nepavyksta, ji ir yra visa priežastis, kodėl ataskaita egzistuoja. Kai kurios kliūtys pašalinamos konverterio, o kai kurios — ne: šifravimas, draudžiamas turinys, nešantis prasmę, šrifto programa, kurios tiesiog nėra niekur kompiuteryje. Ataskaita atskiria, kas buvo padaryta, nuo to, kas liko, ir tai paverčia „konvertavimas nepavyko“ darbo elementu
Traktuokite verdiktą kaip vartus paketinio konvejerio. Konvertuokite, skaitykite verdiktą ir nukreipkite failą: archyvuokite tuos, kurie praėjo, o likusius įdėkite į eilę žmogui su pridėta ataskaita. Ko neturėtumėte daryti — tai išsaugoti nepavykusio konvertavimo išvestį į archyvą, nes ji atrodo geriau nei įvestis — ji dabar neša deklaraciją, kurios patikra atsisakė patvirtinti
Jau esamo įrašo, kurį failas neša, skaitymas
Prieš konvertuodami bet ką, žinokite, ką dokumentas sako apie save. PDF/A patikra, negalinti perskaityti esamo standartų įrašo, vertina kiekvieną failą pagal 1 dalį, ką jis bedeklaruotų, o tai reiškia, kad visiškai taisyklingas PDF/A-2 ar PDF/A-3 dokumentas pranešamas kaip neturintis įrašo ir esantis per aukštos versijos — priešingai tiesai
Įrašas skaitomas nepriklausomai nuo to, ar gamintojas užrašė jį kaip XMP elementą, ar kaip atributą. Abi formos yra įprastas XMP, ir priimant tik vieną iš jų, failai iš kitų gamintojų atrodo nepažymėti. Jei kada nors svarstėte, kodėl dokumentas, kuris patikrinamas kitur, trikiasi jūsų pačių konvejeryje, tai gera vieta pažiūrėti pirmiausia
Valymas prieš archyvavimą ir riktas, vertas žinoti
Archyvinis konvertavimas ir valymas dažnai vyksta kartu, nes turinys, kurį nori pašalinti saugumo politika, stipriai persidengia su turiniu, kurį draudžia PDF/A. SanitizeDocument pašalina JavaScript, o paskutinio scenarijaus pašalinimas taip pat pašalina tuščią pavadinimų medį, kurį jis palieka — medį, kuris kitaip vis dar sakytų skaitytuvui, kad dokumentas nešė scenarijus
Antrąją pusę išmoko sunkiu būdu:Vienetas išjungimas paketų sąraše reiškė, kad valymas pranešdavo šalinantis scenarijus, nors iš tikrųjų jų nešalino, todėl išvalytas dokumentas vis dar paleisdavo savo scenarijus atidaromas. Tai geras argumentas už bendrąjį principą, kuriuo remiasi visas šis straipsnis — patikrinkite rezultatą, o ne pasitikėkite operacija, tiek savo konvejeryje, tiek bibliotekoje
Dėl supančio archyvavimo darbo žr. PDF/A ir PDF/UA skrydžio prieš tai, tikrojo redagavimo ir turinio pašalinimo bei PDF/A-3 XMP plėtimo schemų, skirtų Factur-X aprašymus, kurie padengia metaduomenų pusę, kai archyvuojamas dokumentas taip pat neša struktūrizuotus sąskaitų duomenis
PDFlibPas yra natyvi Pascal PDF biblioteka, skirta Delphi, C++Builder ir Lazarus, todėl konvertavimas, taisymas ir tikrinimas vyksta jūsų pačių procese be išorinio įrankio grandinėje — žr. PDFlibPas produkto puslapį dėl palaikomų PDF/A dalių ir platformų