Ko HotXLS izvozi delovni list v PDF z omogočenim samodejnim označevanjem, slike delovnega lista, ki nosijo nadomestno besedilo, zdaj izdajo kot neodvisni strukturni elementi /Figure z vnosom Unicode /Alt, gostimi identifikatorji označene vsebine na stran in natanko vnosi drevesa staršev. Slike brez nadomestnega besedila ostanejo okrasni artefakti in grafikoni ostanejo artefakti prav tako. Ta natančen obseg je pomemben: naredi informativne slike dosegljive bralniku zaslona in ni ista stvar kot polna skladnost PDF/UA
Mehanika za njim je zanimivejša od opisa funkcije, ker sta dva od njiju tiste vrste podrobnosti, ki tiho proizvedeta strukturno veljaven PDF, katerega struktura kaže na napačno vsebino
Kaj šteje kot informativna slika?
Samo ne-prazen AltText. Lastnost TXLSXImage.AltText povratno prenaša atribut OOXML descr ne-vizualnih lastnosti slike, kar je mesto, kjer Excel shrani besedilo, ki ga uporabnik natipa v podokno nadomestnega besedila. To je edini signal v datoteki, da je avtor menil, da slika nosi informacijo in ne dekoracije, zato je edini signal, ki mu izvozitelj zaupa
Dva skoraj-zadetka sta namenoma ne sprejeta. Polje naslova, shranjeno ločeno od opisa, ni nadomestilo: naslov je ime za objekt in ne besedilni ekvivalent njega, in povzdigniti ga v /Alt bi proizvedlo dokument, ki preide samodejni pregled, medtem ko oznanja »Slika 3« bralniku zaslona. Prazen opis prav tako ni vrzel za zapolnitev z nadomestnim znakom; pomeni, da slika ostane artefakt, kar je pravi izid za logotip ali ločilno ravnilo. Grafikoni ostanejo artefakti tudi za zdaj, ker je besedilni ekvivalent grafikona njegovi podatki in sintetiziranje enega iz serij bi bilo izumljanje in ne izvlečenje
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 pred izvozom: slika brez opisa
// bo izvožena kot okrasni 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;
Zakaj stran potrebuje enega samega dodeljevalca MCID?
Ker je drevo staršev matrika indeksirana z identifikatorjem označene vsebine in dva dodeljevalca proizvedeta dva vnosa, ki zahtevata isto režo. Označen PDF povezuje vsebino s strukturo v obeh smereh. Na strani vsebine je razpon toka vsebine strani ovit v operaterja BDC in EMC, ki nosita številko /MCID, unikatno znotraj te strani. Na strani strukture nosi slovar strani ključ /StructParents, ki poimenuje vrstico dokumenta /ParentTree, ta vrstica pa je matrika, katere element pri indeksu n je strukturni element, lastnik MCID n
Stran delovnega lista vsebuje celice tabele in zdaj slike. Če označevalnik celic šteje svoje identifikatorje od nič in označevalnik slik prav tako šteje od nič, prva slika zahteva režo, ki jo prva celica že lasti. Nič o nastali datoteki ni dovolj deformirano, da bi jo razčlenjevalnik odklonil: drevo strukture je nedotaknjeno, označena vsebina je uravnotežena in validator vidi dokument z drevesom staršev. Kar bralnik zaslona dobi, je celica tabele oznanjena kot slika ali slika oznanjena z besedilom celice. Izvozitelj torej dodeljuje iz enega števca na ravni strani, v skupni rabi obeh označevalcev, in zamrzne zapis strani samo enkrat, ko je številka objekta strani znana, saj vrstice drevesa staršev ni mogoče zapisati, preden stran, na katero se sklicuje, ima identiteto
Figure mora oviti celotno vidno instanco
Naivna umestitev je oviti operater Do, ki prikliče XObject slike, saj je to operater, ki nariše sliko. Ni dovolj. Slika delovnega lista je pogosto narisana s senco za njo in potjo izrezovanja okoli nje in ti znaki so del vidnega objekta. Pusti zunaj obsega /Figure postanejo neoznačena vsebina, kar je natanko stanje, ki ga označi revizija strukture
Tako se obseg označene vsebine odpre pred senco in zapre za risanjem slike, pokriva pa tudi izrez. Deljenje je ohranjeno tam, kjer je deljenje pravilno: dve celici, ki prikazujeta isti tovor slike, še vedno sklicujeta en XObject slike, ker je to optimizacija na ravni virov in nima ničesar s semantiko. Kar vsaka vidna instanca dobi, je njen lasten MCID in njen lasten strukturni element, ker sta dve pojavitvi istega logotipa na različnih mestih dve stvari, ki ju bralec sreča. Umestitev slik in geometrija EMU, ki pozicionira te objekte, je pokrita v članku o geometriji slik
Bralni vrstni red na strani delovnega lista
Bralni vrstni red je odločitev, ki jo mora narediti izvozitelj, ker preglednica nima avtorskega toka na način, kot ga ima dokument. Pravilo, sprejeto, je stabilno in enostavno za razlago: za vsako stran tabela pride najprej, nato slike v vrstnem redu risanja. Bralec torej sliši tabelarično vsebino strani in nato njene slike, namesto da bi imel slike prepletene na katerem koli položaju, ki so ga risani objekti slučajno zasedli v datoteki
Ta vrstni red je na stran in ne na dokument, kar šteje na delovnem zvezku, ki paginira v ducate strani: veja strukture vsake strani je samozadostna, tako da bralec, ki se premika med stranmi, ne skoči nazaj v zgodnejšo tabelo. Če potrebujete nadzor nad tem, kako se list paginira na prvem mestu, je interakcija nastavitve strani in območja tiska opisana v članku o zaščiti in nastavitvi strani
Kaj to certificira in kaj ne
Certificira, da informativne slike dosežejo pomožno tehnologijo s svojim opisom, preskrbljenim s strani avtorja, in da je preslikava vsebine-v-strukturo pravilna in ne zgolj prisotna. Ne naredi izhoda skladnega s PDF/UA in opisovanje njega na ta način bi bila trditev, ki je implementacija ne more podpreti: grafikoni so še vedno artefakti in polna izjava skladnosti zahteva revizijo vsakega tipa strukture, vsake pisave in metapodatkov dokumenta kot celote
Če je vaša zahteva arhivski profil ali profil skladnosti in ne izboljšava dostopnosti, je to druga izvozna konfiguracija in drug nabor pregledov, opisan v članku o arhivskem izvozu PDF/A. Ti dve se kombinirata, ampak odgovorita različnim revizorjem
En praktičen predlog za cevovod poročil: revizirajte nadomestno besedilo na točki, kjer je delovni zvezek generiran, in ne ob času izvoza. Generator ve, kaj vsaka slika grafikona ali vgrajen diagram predstavlja, in lahko zapiše pravi opis v AltText; prehod ob času izvoza vam lahko pove samo, da opis manjka. HotXLS bere in piše XLS, XLSX, ODS in CSV domače iz Delphi in C++Builder brez odvisnosti Excel in njegove možnosti izvozne konfiguracije so navedene na strani produkta HotXLS Delphi spreadsheet component