Kada HotXLS izvozi radni list u PDF s uključenim automatskim označavanjem, slike radnog lista koje nose alternativni tekst sada emitiraju se kao neovisni strukturni elementi /Figure s Unicode unosom /Alt, gustim identifikatorima označenog sadržaja na razini stranice i točnim unosima roditeljskog stabla. Slike bez alternativnog teksta ostaju ukrasni artefakti, i grafikoni ostaju artefakti također. Taj točan opseg važan je: čini informativne slike dostižnima čitaču zaslona, i to nije ista stvar kao potpuna PDF/UA sukladnost
Mehanika iza toga zanimljivija je od opisa značajke, jer su dvije od njih vrsta pojedinosti koja tiho proizvodi strukturno valjan PDF čija struktura upućuje na pogrešan sadržaj
Što se računa kao informativna slika?
Samo neprazan AltText. Svojstvo TXLSXImage.AltText prenosi OOXML atribut descr neverbalnih svojstava slike, što je mjesto gdje Excel sprema tekst koji korisnik upisuje u okno alternativnog teksta. To je jedini signal u datoteci da je autor smatrao sliku nositeljem informacije umjesto ukrasa, pa je to jedini signal kojem izvoznik vjeruje
Dva gotova pogotka namjerno se ne prihvaćaju. Polje naslova, spremljeno odvojeno od opisa, nije zamjena: naslov je ime objekta, ne njegov tekstualni ekvivalent, i unapređenje u /Alt proizvelo bi dokument koji prolazi automatiziranu provjeru dok čitaču zaslona najavljuje "Picture 3". Prazan opis također nije jaz koji treba popuniti rezerviranim mjestom; znači da slika ostaje artefakt, što je ispravan ishod za logotip ili odjeljnu liniju. Grafikoni također ostaju artefakti za sada, jer je tekstualni ekvivalent grafikona njegovi podaci, a sintetiziranje jednog iz serija bilo bi izmišljanje umjesto izdvajanja
uses
lxHandleX, lxPDF;
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
Exporter: TXLSPDFExport;
I: Integer;
begin
Book := TXLSXWorkbook.Create;
try
Book.Open('regional-review.xlsx');
Sheet := Book.Sheets.ByPos[0];
// Revizija prije izvoza: slika bez opisa
// izvest će se kao ukrasni artefakt
for I := 0 to Sheet.Images.Count - 1 do
if Sheet.Images[I].AltText = '' then
Sheet.Images[I].AltText := DescribeImage(Sheet.Images[I].Name);
Exporter := TXLSPDFExport.Create;
try
Exporter.TagMode := xlsPdfTagsAutomatic;
Exporter.DocumentLanguage := 'en-US';
Exporter.SaveAsPDF(Sheet, 'regional-review.pdf');
finally
Exporter.Free;
end;
finally
Book.Free;
end;
end;
Zašto stranica treba jedan MCID dodjeljivač?
Zato što je roditeljsko stablo polje indeksirano identifikatorima označenog sadržaja, i dva dodjeljivača proizvode dva unosa koja polažu pravo na isti utor. Označeni PDF povezuje sadržaj sa strukturom u oba smjera. Na strani sadržaja, raspon toka sadržaja stranice omota se operatorima BDC i EMC koji nose broj /MCID jedinstven unutar te stranice. Na strani strukture, rječnik stranice nosi ključ /StructParents koji imenuje red dokumentnog /ParentTree, i taj red je polje čiji je element na indeksu n strukturni element koji posjeduje MCID n
Stranica radnog lista sadrži ćelije tablice i, sada, likove. Ako označivač ćelija broji svoje identifikatore od nule i označivač likova također broji od nule, prvi lik polaže pravo na utor koji prva ćelija već posjeduje. Ništa u nastaloj datoteci nije dovoljno neispravno da parser odbije: stablo strukture netaknuto je, označeni sadržaj uravnotežen je, i validator vidi dokument s roditeljskim stablom. Ono što čitač zaslona dobije jest ćelija tablice najavljena kao slika, ili slika najavljena s tekstom ćelije. Izvoznik dakle dodjeljuje iz jednog brojača na razini stranice dijeljenog oba označivača, i smrzne zapis stranice tek kada je broj objekta stranice poznat, jer se red roditeljskog stabla ne može napisati prije nego stranica na koju se odnosi ima identitet
Figure mora omotati cijelu vidljivu instancu
Naivno smještanje jest omotati operator Do koji poziva slikovni XObject, jer je to operator koji crta sliku. Nije dovoljno. Slika radnog lista često se crta sa sjenom iza sebe i putanjom izrezivanja oko sebe, i te oznake dio su vidljivog objekta. Ostavljene izvan opsega /Figure postaju neoznačeni sadržaj, što je točno stanje koje revizija strukture označava
Opseg označenog sadržaja dakle se otvara prije sjene i zatvara nakon crtanja slike, pokrivajući i izrezivanje. Dijeljenje se čuva tamo gdje je dijeljenje ispravno: dvije ćelije koje prikazuju isti teret slike i dalje referenciraju jedan slikovni XObject, jer je to optimizacija na razini resursa i nema nikakve veze sa semantikom. Ono što svaka vidljiva instanca dobije jest vlastiti MCID i vlastiti strukturni element, jer su dvije pojave istog logotipa na različitim mjestima dvije stvari koje čitatelj susreće. Smještanje slika i EMU geometrija koja pozicionira te objekte pokriveni su u članku o geometriji slika
Redoslijed čitanja na stranici radnog lista
Redoslijed čitanja odluka je koju izvoznik mora donijeti, jer proračunska tablica nema autorski tok na način na koji ga ima dokument. Pravilo koje je usvojeno stabilno je i lako za objasniti: za svaku stranicu, najprije tablica, zatim likovi u redoslijedu crtanja. Čitatelj dakle čuje tablični sadržaj stranice i zatim njegove slike, umjesto da mu se slike isprepliću na bilo kojem položaju koji su crtajući objekti slučajno zauzeli u datoteci
Taj je redoslijed po stranici umjesto po dokumentu, što važi na radnoj knjizi koja se paginira u desetke stranica: grana strukture svake stranice samodostatna je, pa čitatelj koji prelazi između stranica ne skače natrag u raniju tablicu. Ako trebate kontrolu nad time kako se list uopće paginira, međudjelovanje postavljanja stranice i područja ispisa opisano je u članku o zaštiti i postavljanju stranice
Što ovo certificira, a što ne
Certificira da informativne slike dospijevaju do pomoćne tehnologije s opisom koji je dostavio autor, i da je preslikavanje sadržaja u strukturu ispravno, a ne samo prisutno. Ne čini izlazni PDF PDF/UA sukladnim, i opisivanje na taj način bila bi tvrdnja koju implementacija ne može poduprijeti: grafikoni su i dalje artefakti, a potpuna izjava o sukladnosti zahtijeva reviziju svake vrste strukture, svakog fonta i metapodataka dokumenta kao cjeline
Ako je vaš zahtjev arhivski ili sukladnosni profil umjesto poboljšanja pristupačnosti, to je druga izvozna konfiguracija i drugi skup provjera, opisan u članku o PDF/A arhivskom izvozu. One se kombiniraju, ali odgovaraju različitim revizorima
Jedan praktičan prijedlog za cjevovod izvještavanja: revidirajte alternativni tekst u trenutku kada se radna knjiga generira, ne u trenutku izvoza. Generator zna što svaka slika grafikona ili ugrađeni dijagram predstavlja, i može upisati stvarni opis u AltText; prolaz u trenutku izvoza može vam samo reći da opis nedostaje. HotXLS čita i piše XLS, XLSX, ODS i CSV izvorno iz Delphija i C++Buildera bez Excel ovisnosti, a njegove opcije izvozne konfiguracije navedene su na stranici proizvoda HotXLS Delphi spreadsheet component