Kada HotXLS izvozi radni list u PDF sa uključenim automatskim tagiranjem, slike radnog lista koje nose alternativni tekst sada emituju kao nezavisni /Figure elementi strukture sa Unicode /Alt unosom, gustim identifikatorima označenog sadržaja po stranici i tačnim unosima roditeljskog stabla. Slike bez alternativnog teksta ostaju dekorativni artefakti, i grafikoni ostaju artefakti takođe. Taj precizni obuhvat važi: čini informativne slike dostižnim čitaču ekrana, i nije ista stvar kao potpuna PDF/UA usaglašenost
Mehanika iza njega zanimljivija je od opisa funkcije, jer su dva od njih vrsta detalja koji tiho proizvodi strukturno valjan PDF čija struktura ukazuje na pogrešan sadržaj
Šta se računa kao informativna slika?
Samo neprazan AltText. Svojstvo TXLSXImage.AltText prenosi u oba smera OOXML descr atribut nevizuelnih svojstava slike, gde Excel čuva tekst koji korisnik ukuca u pane alt-teksta. To je jedini signal u datoteci da je autor smatrao sliku nosiocem informacije umesto dekoracije, pa je to jedini signal kome eksporter veruje
Dva skoro-pogotka namerno nisu prihvaćena. Polje naslova, čuvano odvojeno od opisa, nije zamena: naslov je ime objekta, ne tekstualni ekvivalent njega, i njegovo unapređenje u /Alt proizvelo bi dokument koji prolazi automatsku proveru dok objavljuje "Picture 3" čitaču ekrana. Prazan opis takođe nije jaz za popunjavanje rezervnim mestom; znači da slika ostaje artefakt, što je ispravan ishod za logo ili liniju razdelnika. Grafikoni takođe ostaju artefakti za sada, jer je tekstualni ekvivalent grafikona njegovi podaci i sintetisanje jednog iz serija bilo bi izmišljanje umesto izvlačenja
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 pre izvoza: slika bez opisa
// biće izvezena kao dekorativni 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 dodeljivač?
Zato je roditeljsko stablo niz indeksiran identifikatorom označenog sadržaja, i dva dodeljivača proizvode dva unosa koja polažu pravo na isti slot. Tagirani PDF povezuje sadržaj sa strukturom u oba smera. Na strani sadržaja, deo toka sadržaja stranice omotan je operatorima BDC i EMC koji nose /MCID broj jedinstven unutar te stranice. Na strani strukture, rečnik stranice nosi ključ /StructParents koji imenuje red dokumentnog /ParentTree, i taj red je niz čiji je element na indeksu n element strukture koji poseduje MCID n
Stranica radnog lista sadrži ćelije tabele i, sada, figure. Ako tager ćelija broji svoje identifikatore od nule i tager figura takođe broji od nule, prva figura polaže pravo na slot koji prva ćelija već poseduje. Ništa kod rezultujuće datoteke nije deformisano dovoljno da parser odbije: stablo strukture je netaknuto, označeni sadržaj je balansiran, i validator vidi dokument sa roditeljskim stablom. Ono što čitač ekrana dobija jeste ćelija tabele objavljena kao slika, ili slika objavljena sa tekstom ćelije. Eksporter dakle dodeljuje iz jednog brojača nivoa stranice deljenog od oba tagera, i zamrzava zapis stranice tek kada je broj objekta stranice poznat, pošto se red roditeljskog stabla ne može napisati pre nego što stranica na koju se odnosi ima identitet
Figure mora omotati celu vidljivu instancu
Naivan smeštaj je omotati operator Do koji poziva XObject slike, pošto je to operator koji crta sliku. Nije dovoljno. Slika radnog lista često se crta sa senkom iza nje i putanjom odsecanja oko nje, i te oznake deo su vidljivog objekta. Ostavljene van /Figure obuhvata postaju neoznačeni sadržaj, što je tačno stanje koje revizija strukture označava
Pa se obuhvat označenog sadržaja otvara pre slike-senke i zatvara posle crtanja slike, pokrivajući i odsecanje. Deljenje se čuva tamo gde je deljenje ispravno: dve ćelije koje prikazuju isti sadržaj slike i dalje referenciraju jedan XObject slike, jer je to optimizacija nivoa resursa i nema nikakve veze sa semantikom. Ono što svaka vidljiva instanca dobija jeste svoj MCID i svoj element strukture, jer su dve pojave istog logotipa na različitim mestima dve stvari na koje čitalac nailazi. Smeštaj slika i EMU geometrija koja pozicionira te objekte pokrivena je u članku o geometriji slika
Redosled čitanja na stranici radnog lista
Redosled čitanja odluka je koju eksporter mora doneti, jer tabela nema autorisan tok na način na koji dokument ima. Usvojeno pravilo stabilno je i lako za objasniti: za svaku stranicu, tabela dolazi prva, zatim figure u redosledu crtanja. Čitalac dakle čuje tabelarni sadržaj stranice pa zatim njene slike, umesto da slike budu isprepletene na položaju koji su crtački objekti slučajno zauzeli u datoteci
Taj redosled je po stranici umesto po dokumentu, što važi na radnoj svesci koja se paginira u desetine stranica: grana strukture svake stranice samodovoljna je, pa čitalac koji se kreće između stranica ne skače nazad u raniju tabelu. Ako treba kontrola nad tim kako se list paginira uopšte, međusobno delovanje podešavanja stranice i oblasti štampe opisano je u članku o zaštiti i podešavanju stranice
Šta ovo sertifikuje, a što ne
Sertifikuje da informativne slike stižu do pomoćne tehnologije sa opisom koji je dostavio autor, i da je mapiranje sadržaja-u-strukturu ispravno, a ne samo prisutno. Ne čini izlaz PDF/UA usaglašenim, i opisivanje tako bila bi tvrdnja koju implementacija ne može podržati: grafikoni su i dalje artefakti, i potpuna izjava usaglašenosti traži reviziju svake vrste strukture, svakog fonta, i metapodataka dokumenta kao celine
Ako je vaš zahtev arhivski ili profil usaglašenosti umesto unapređenja pristupačnosti, to je drugačija izvozna konfiguracija i drugi skup provera, opisano u članku o PDF/A arhivskom izvozu. Dve se kombinuju, ali odgovaraju različitim revizorima
Jedan praktičan predlog za pipeline izveštavanja: revizionirajte alternativni tekst u trenutku kada se radna sveska generiše, ne u vreme izvoza. Generator zna šta svaka slika grafikona ili ugrađeni dijagram predstavlja, i može napisati pravi opis u AltText; prolaz u vreme izvoza može vam samo reći da opis nedostaje. HotXLS čita i piše XLS, XLSX, ODS i CSV nativno iz Delphi-ja i C++Builder-a bez Excel zavisnosti, i opcije izvozne konfiguracije navedene su na stranici proizvoda HotXLS Delphi spreadsheet component