HotPDF iz Delphija i C++Builder piše izvorne PDF 2.0 dokumente, uključujući tri arhivska profila PDF/A-4 i pristupačni PDF/UA-2 izlaz s elementima strukture u prostoru imena. Njihov odabir pitanje je dvaju svojstava, ali standardi iza tih svojstava promijenili su se više nego što verzija sugerira: PDF/A-4 napustio je slova sukladnosti koja su svi naučili uz PDF/A-2, a PDF/UA-2 uveo je prostore imena strukture koje dokument dijela 1 nikad nije imao
Ovaj članak pokriva što se doista mijenja u generiranoj datoteci, a koje pogreške HotPDF pretvara u iznimku pri EndDoc umjesto u dokument koji pada na provjeri valjanosti kod kupca
Čime se identifikacija PDF/A-4 razlikuje od dijela 2 i 3
PDF/A-4 identificira se brojem dijela i godinom revizije, bez slova sukladnosti za osnovni dio. Postavite PDFACompliance na '4' i HotPDF emitira pdfaid:part=4 s pdfaid:rev=2020 i bez ikakvog unosa pdfaid:conformance. Slovo nije nestalo: dio 4 nema razine A/B/U, jer su zahtjevi koji su ih nekad razdvajali utopljeni u osnovni dio
Dva proširenja zadržavaju slovo. '4E' bira PDF/A-4e za inženjerske dokumente i emitira sukladnost E, koja dopušta staze 3D i RichMedia napomena koje drugi profili zabranjuju. '4F' bira PDF/A-4f i emitira sukladnost F, koja dopušta ugrađenu datoteku bilo kojeg formata. Sva tri nameću zaglavlje PDF 2.0, zahtijevaju uobičajenu namjeru izlaza PDF/A i provjere metapodataka, te zabranjuju šifriranje; šifrirana arhivska datoteka proturječje je koje standard ne prihvaća
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := 'invoice-archive.pdf';
Pdf.PDFACompliance := '4F'; // PDF/A-4f: associated files of any format
Pdf.BeginDoc;
Pdf.CurrentPage.SetFont('Arial', [], 11);
Pdf.CurrentPage.TextOut(50, 760, 0, 'Invoice 2026-0731');
Pdf.AddPDFAssociatedFile('invoice.xml', 'text/xml',
'Structured invoice data', 'Data', LoadInvoiceBytes);
Pdf.EndDoc;
finally
Pdf.Free;
end;
end;
AddPDFAssociatedFile ugrađuje datoteku, izgrađuje njezin FileSpec s /AFRelationship i registrira je i u polje /AF kataloga i u stablo imena EmbeddedFiles. Obje registracije su obavezne; datoteka navedena samo u jednoj od njih najčešći je pojedinačni razlog što hibridna faktura prođe brzu provjeru okom, a pada na pravom validatoru. Niz znakova odnosa prihvaća Source, Data, Alternative, Supplement ili Unspecified, a aktivni profil mora biti PDF/A-3, PDF/A-4e ili PDF/A-4f; osnovni profil dijela 4 ne prima pridružene datoteke. Starije ime AddPDFA3AssociatedFile i dalje radi za postojeći kod
Što PDF/UA-2 traži, a PDF/UA-1 nije
PDF/UA-2 nameće PDF 2.0 i emitira pdfuaid:part=2 s pdfuaid:rev=2024, a uvodi prostore imena u stablo strukture. Dokument dijela 1 imao je jedan ravan vokabular standardnih uloga. Dokument dijela 2 može nositi prilagođene uloge pod uvjetom da svaka pripada deklariranom prostoru imena, što čini označavanje specifično za domenu čitljivim pomoćnoj tehnologiji umjesto pogađanjem
Dvije metode to implementiraju. RegisterStructureNamespace stvara ili ponovno koristi neizravni rječnik /Type /Namespace i navodi ga u StructTreeRoot /Namespaces, vraćajući rječnik da ga možete ponovno iskoristiti. AddStructureElementNS stvara element strukture čiji unos /NS pokazuje na taj rječnik, što je što licencira ime uloge izvan standardnog skupa. Ponovljeni pozivi s istim URI-jem koriste jedan rječnik umjesto da gomilaju duplikate
var
Root: THPDFDictionaryObject;
begin
Pdf.PDFUACompliance := True;
Pdf.PDFUAPart := 2; // part 2 forces PDF 2.0
Pdf.Lang := 'en-US';
Pdf.BeginDoc;
Root := Pdf.AddStructureElement('Document', nil);
Pdf.AddStructureElementNS('WidgetGroup',
'https://example.com/ns/widgets', Root);
Pdf.EndDoc;
end;
Lang ovdje nije ukras. Označeni dokument bez deklariranog prirodnog jezika ostavlja čitač zaslona da pogađa izgovor, a PDF/UA tretira tu propust kao defekt, a ne kao preferencu
Koje strukturalne pogreške hvata EndDoc?
Četiri, i svaka odgovara dokumentu koji bi inače stigao do validatora slomljen. Korijen strukture mora sadržavati točno jedan element Document na vrhu. Svaki rječnik prostora imena mora biti neizravan, utipkan kao Namespace i nositi jedinstveni neprazni URI. Svaka referenca /NS elementa strukture mora se razriješiti na rječnik doista naveden u polju /Namespaces korijena. A uloga bez prostora imena mora biti standardna uloga PDF 2.0 ili se razriješiti kroz RoleMap
Ove se aktiviraju kod EndDoc jer je to posljednji trenutak kad cijelo stablo postoji u memoriji i prvi trenutak kad je potpuno. Hvaćanje ranije značilo bi odbijanje valjanih međustanja; hvatanje kasnije značilo bi da ih se uopće ne hvata. Praktična posljedica za vaš kod jest da se pogreška strukture pojavljuje na kraju generiranja s porukom koja imenuje problem, umjesto da ispliva tjednima kasnije kao veraPDF izvješće koje netko prosljeđuje od kupca
Uloge PDF 2.0 koje je vrijedno poznavati
Tipkani enum uloga dobiva DocumentFragment, Aside, Title, FENote, Sub, Em, Strong i Artifact. Tri od njih mijenjaju način na koji označavate obične poslovne dokumente. Aside konačno daje bočnim trakama i izdvojenim citatima dom koji nije zloupotrijebljeni Sect. FENote označava fusnote i zabilješke kao ono što jesu, tako da čitač može ponuditi ih umjesto da ih isprepliće s temeljnim tekstom. Em i Strong zamjenjuju semantičko nagađanje koje je dolazilo iz označavanja naglaska kao formatiranja na razini raspona
Preopterećenje nizom dodatno prihvaća otvoreni oblik Hn, uključujući H7 i dalje. PDF 1.7 zaustavio se na H6, što je prisiljavalo duboke tehničke dokumente da spljoste svoj nacrt ili ponovno koriste razine. Ako generirate dokumente standarda, pravne kodove ili kataloge dijelova, ovo samo može biti razlog za premještanje izlaza na PDF 2.0
Što provjeriti prije prebacivanja proizvodnog izlaza
PDF 2.0 promjena je zaglavlja s dugim repom. Stariji alati za unos arhive, neki RIP-ovi za tisak i iznenađujuće mnogo poslovnih preglednika prihvaćaju samo do PDF 1.7, i padaju na zaglavlju, a ne na ičemu što ste napravili loše. Prije prebacivanja potvrdite potrošačke sustave, i imajte na umu da odabir PDF/A-4 profila bira PDF 2.0 bez obzira jeste li to tražili
Sigurni slijed jest zadržati PDF/A-3 za dokumente koji idu vanjskim nepoznatim čitateljima, koristiti PDF/A-4f za interne arhive gdje kontrolirate unos, te usvojiti PDF/UA-2 samo gdje politika pristupačnosti imenuje ga. Ako prvo prolazite arhivsku stranu, vodiči kroz PDF/A, PDF/X i PDF/UA provjeru valjanosti te kroz ZUGFeRD i Factur-X hibridne fakture na PDF/A-3 pokrivaju izbore profila koji su važni prije verzije, a bilješke o automatiziranom izvješćivanju preleta pokazuju kako presudu učiniti dijelom svoje izgradnje, a ne ručnim korakom
HotPDF isporučuje cijelu površinu za autorstvo PDF 2.0 kao izvorni VCL kod za Delphi i C++Builder, pa izlaz PDF/A-4 i PDF/UA-2 ne treba vanjski motor ili redistribuiraju komponentu. Na stranici HotPDF komponente navedeni su podržani profili i verzije RAD Studio