HotPDF iz Delphija in C++Builderja piše izvorne dokumente PDF 2.0, vključno s tremi arhivskimi profili PDF/A-4 in dostopnim izhodom PDF/UA-2 z imensko razdeljenimi elementi strukture. Njihova izbira je zadeva dveh lastnosti, toda standardi za njimi so se spremenili bolj, kot nakazuje številka različice: PDF/A-4 je opustil črke skladnosti, ki se jih je vsakdo naučil ob PDF/A-2, PDF/UA-2 pa je uvedel imenske prostore strukture, ki jih dokument dela 1 nikoli ni imel
Ta članek obravnava, kaj se dejansko spremeni v ustvarjeni datoteki in katere napake HotPDF ob EndDoc spremeni v izjemo namesto v dokument, ki pri stranki ne uspe pri validaciji
Kako se identifikacija PDF/A-4 razlikuje od delov 2 in 3
PDF/A-4 se identificira s številko dela in letom revizije, pri osnovnem delu brez črke skladnosti. Nastavite PDFACompliance na '4' in HotPDF izpiše pdfaid:part=4 z pdfaid:rev=2020 in brez vnosa pdfaid:conformance sploh. Črka ni izginila — del 4 nima stopenj A/B/U, ker so bile zahteve, ki so jih nekoč ločevale, zložene v osnovni del
Dve razširitvi obdržita črko. '4E' izbere PDF/A-4e za inženirske dokumente in izpiše skladnost E, ki dovoljuje poti opomb 3D in RichMedia, ki jih drugi profili prepovedujejo. '4F' izbere PDF/A-4f in izpiše skladnost F, ki dovoljuje vdelano datoteko kateregakoli formata. Vsi tri silijo glavo PDF 2.0, zahtevajo običajne preveritve namena izhoda PDF/A in metapodatkov ter prepovedujejo šifriranje — šifrirana arhivska datoteka je protislovje, ki ga standard ne obravnava
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 vdelata datoteko, zgradi njen FileSpec z /AFRelationship in jo registrira tako v polje /AF kataloga kot v drevo imen EmbeddedFiles. Obi registraciji sta zahtevani; datoteka, navedena le v eni od njiju, je najpogostejši posamični razlog, zakaj hibridni račun opravi hitro oko preverjanje in ne uspe pri resničnem validatorju. Niz razmerja sprejema Source, Data, Alternative, Supplement ali Unspecified, aktivni profil pa mora biti PDF/A-3, PDF/A-4e ali PDF/A-4f — osnovni profil dela 4 ne dopušča pridruženih datotek. Starejše ime AddPDFA3AssociatedFile za obstoječo kodo še vedno deluje
Kaj PDF/UA-2 zahteva, česar PDF/UA-1 ni
PDF/UA-2 vsili PDF 2.0 in izpiše pdfuaid:part=2 z pdfuaid:rev=2024, v drevo strukture pa vnese imenske prostore. Dokument dela 1 je imel eno ploščato besedišče standardnih vlog. Dokument dela 2 lahko nosi vloge po meri, dokler vsaka od njih pripada razglašenemu imenskemu prostoru, kar omogoča, da je domenam specifično označevanje za assistivno tehnologijo berljivo in ne ugibanje
To implementirata dve metodi. RegisterStructureNamespace ustvari ali ponovno uporabi posredni slovar /Type /Namespace in ga navede v StructTreeRoot /Namespaces, pri čemer vrne slovar, da ga lahko ponovno uporabite. AddStructureElementNS ustvari element strukture, katerega vnos /NS kaže na ta slovar, kar licencira ime vloge zunaj standardne množice. Ponovljeni klici z istim URI-jem ponovno uporabijo en slovar namesto kopičenja dvojnikov
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 tu ni okras. Označen dokument brez izjave naravnega jezika pusti bralnik zaslona, da ugiba o izgovorjavi, PDF/UA pa obravnava opustitev kot napako in ne preference
Katere napake strukture ujame EndDoc?
Štiri in vsaka ustreza dokumentu, ki bi sicer prišel do validatorja zlomljen. Koren strukture mora vsebovati natanko en vrhnji element Document. Vsak slovar imenskega prostora mora biti posreden, tipiziran kot Namespace in nositi enoličen neprazen URI. Vsaka referenca /NS elementa strukture se mora razrešiti v slovar, dejansko naveden v korenskem polju /Namespaces. Neimensko-prostorna vloga pa mora biti standardna vloga PDF 2.0 ali se razrešiti skozi RoleMap
Ti se sprožijo ob EndDoc, ker je to zadnji trenutek, ko celotno drevo obstaja v pomnilniku, in prvi trenutek, ko je popolno. Ujetje prej bi pomenilo zavrnitev veljavnih vmesnih stanj; ujetje pozneje bi pomenilo, da jih sploh ne ujamemo. Praktična posledica za vašo kodo je, da se napaka strukture pokaže ob koncu generacije s sporočilom, ki poimenuje težavo, namesto da se pokaže tedne pozneje kot poročilo veraPDF, ki ga nekdo posreduje od stranke
Vloge PDF 2.0, ki se splača poznati
Naštevka tipiziranih vlog pridobi DocumentFragment, Aside, Title, FENote, Sub, Em, Strong in Artifact. Tri od teh spremenijo, kako označujete običajne poslovne dokumente. Aside končno da stranskim vrsticam in poudarjenim navedbam dom, ki ni zlorabljen Sect. FENote označi sprotna in končna opomba kot tisto, kar sta, tako ju bralec lahko ponudi namesto da ju prepleta s telesom besedila. Em in Strong nadomestita semantično ugibanje, ki je izhajalo iz označevanja poudarka kot oblikovanja na ravni razpona
Preobremenitev z nizom dodatno sprejme odprto obliko Hn, vključno z H7 in naprej. PDF 1.7 se je ustavil pri H6, kar je prisililo globoke tehnične dokumente, da so sploščili svojo orisno strukturo ali ponovno uporabljali ravni. Če generirate standarde, pravne kodekse ali kataloge delov, je lahko to sam po sebi razlog za premik izhoda na PDF 2.0
Kaj preveriti pred preklopom proizvodnega izhoda
PDF 2.0 je sprememba glave z dolgim repom. Starejša orodja za arhivski uvoz, nekateri RIP-i tiska in presenetljivo veliko poslovnih bralnikov sprejemajo le do PDF 1.7 in odpovejo pri glavi in ne pri čemer, kar ste naredili narobe. Pred preklopom potrdite uvozne sisteme in pomnite, da izbira profila PDF/A-4 izbere PDF 2.0, ne glede na to, ali ste to zahtevali ali ne
Varno zaporedje je obdržati PDF/A-3 za dokumente, ki gredo navzven neznanim bralcem, uporabiti PDF/A-4f za notranje arhive, kjer nadzirate uvoz, in sprejeti PDF/UA-2 le tam, kjer ga politika dostopnosti poimenuje. Če najprej obdelujete arhivsko stran, vodniki po validaciji PDF/A, PDF/X in PDF/UA in po hibridnih računih ZUGFeRD in Factur-X na PDF/A-3 obravnavajo izbire profilov, ki štejejo pred številko različice, zapiski o avtomatiziranem poročanju predleta pa kažejo, kako verdikt narediti del gradnje in ne ročnega koraka
HotPDF ladji celotno avtorsko ploskev PDF 2.0 kot izvorna koda VCL za Delphi in C++Builder, tako da izhod PDF/A-4 in PDF/UA-2 ne potrebuje zunanjega pogona ali redistribucijske datoteke — stran komponente HotPDF našteva podprte profile in različice RAD Studio