Ketika HotXLS mengekspor worksheet ke PDF dengan penandaan otomatis aktif, gambar worksheet yang membawa teks alternatif kini dipancarkan sebagai elemen struktur /Figure independen dengan entri /Alt Unicode, marked-content identifier rapat lokal halaman, dan entri parent-tree yang persis. Gambar tanpa teks alternatif tetap menjadi artifact dekoratif, dan grafik juga tetap artifact. Cakupan presisi itu penting: ia membuat gambar informatif terjangkau oleh screen reader, dan itu bukan hal yang sama dengan kesesuaian PDF/UA penuh
Mekanika di baliknya lebih menarik daripada deskripsi fiturnya, karena dua di antaranya adalah jenis detail yang diam-diam menghasilkan PDF yang valid secara struktural dengan struktur yang menunjuk ke konten yang keliru
Apa yang dihitung sebagai gambar informatif?
Hanya AltText yang tidak kosong. Property TXLSXImage.AltText round-trip atribut descr OOXML dari properti non-visual gambar, tempat Excel menyimpan teks yang diketik pengguna ke panel alt-text. Itu satu-satunya sinyal di berkas bahwa penulis menganggap gambar membawa informasi alih-alih dekorasi, sehingga itulah satu-satunya sinyal yang dipercaya exporter
Dua hal yang nyaris lolos sengaja tidak diterima. Field judul, yang disimpan terpisah dari deskripsi, bukan pengganti: judul adalah nama untuk objek, bukan padanan tekstualnya, dan mempromosikannya ke /Alt akan menghasilkan dokumen yang lolos pemeriksaan otomatis sambil mengumumkan "Picture 3" ke screen reader. Deskripsi kosong juga bukan celah untuk diisi placeholder; itu berarti gambar tetap menjadi artifact, yang merupakan hasil yang benar untuk logo atau garis pembatas. Grafik juga tetap artifact untuk saat ini, karena padanan tekstual sebuah grafik adalah datanya dan menyintesiskan satu dari seri berarti mengarang, bukan mengekstraksi
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];
// Audit sebelum mengekspor: gambar tanpa deskripsi
// akan diekspor sebagai artifact dekoratif
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;
Mengapa halaman membutuhkan satu alokator MCID?
Karena parent tree adalah array yang diindeks oleh marked-content identifier, dan dua alokator menghasilkan dua entri yang mengklaim slot yang sama. PDF bertag menghubungkan konten ke struktur di kedua arah. Di sisi konten, satu rentang content stream halaman dibungkus operator BDC dan EMC yang membawa nomor /MCID yang unik dalam halaman itu. Di sisi struktur, dictionary halaman membawa kunci /StructParents yang menamai satu baris /ParentTree dokumen, dan baris itu adalah array yang elemennya pada indeks n adalah elemen struktur pemilik MCID n
Halaman worksheet memuat sel tabel dan, kini, figure. Jika penanda sel menghitung identifier-nya dari nol dan penanda figure juga menghitung dari nol, figure pertama mengklaim slot yang sudah dimiliki sel pertama. Tidak ada apa pun tentang berkas hasil yang cacat cukup untuk ditolak parser: pohon strukturnya utuh, marked content-nya seimbang, dan validator melihat dokumen dengan parent tree. Yang didapat screen reader adalah sel tabel yang diumumkan sebagai gambar, atau gambar yang diumumkan dengan teks sebuah sel. Exporter karenanya mengalokasikan dari satu penghitung level halaman yang dibagi kedua penanda, dan membekukan record halaman hanya setelah nomor objek halaman diketahui, karena baris parent-tree tidak bisa ditulis sebelum halaman yang dirujuknya punya identitas
Figure harus membungkus seluruh instansi yang terlihat
Penempatan naifnya adalah membungkus operator Do yang memanggil XObject gambar, karena itulah operator yang menggambar gambarnya. Itu tidak cukup. Gambar worksheet sering digambar dengan bayangan di belakangnya dan clipping path di sekelilingnya, dan tanda-tanda itu bagian dari objek yang terlihat. Ditinggal di luar scope /Figure mereka menjadi konten tak bertanda, yang persis adalah keadaan yang ditandai audit struktur
Jadi scope marked-content terbuka sebelum bayangan dan tertutup setelah penggambaran gambar, mencakup clip juga. Pembagian dipertahankan di tempat pembagian benar: dua sel yang menampilkan payload gambar yang sama tetap merujuk satu XObject gambar, karena itu optimasi level resource dan tidak ada sangkut pindanya dengan semantik. Yang didapat setiap instansi terlihat adalah MCID dan elemen strukturnya sendiri, karena dua kemunculan logo yang sama di tempat berbeda adalah dua hal yang dijumpai pembaca. Penempatan gambar dan geometri EMU yang memosisikan objek-objek ini dibahas dalam artikel geometri gambar
Urutan baca pada halaman worksheet
Urutan baca adalah keputusan yang harus dibuat exporter, karena spreadsheet tidak punya alur yang ditulis sebagaimana dokumen. Aturan yang diadopsi stabil dan mudah dijelaskan: untuk setiap halaman, tabel datang lebih dulu, lalu figure dalam urutan gambar. Pembaca karenanya mendengar konten tabular halaman lalu gambarnya, alih-alih gambar diselangi pada posisi apa pun yang kebetulan ditempati objek menggambar di berkas
Urutan itu per halaman alih-alih per dokumen, yang penting pada workbook yang berpaginasi menjadi lusinan halaman: cabang struktur setiap halaman berdiri sendiri, sehingga pembaca yang berpindah antar halaman tidak melompat kembali ke tabel yang lebih awal. Jika Anda membutuhkan kendali atas bagaimana sheet berpaginasi sejak awal, interaksi page-setup dan print-area dijelaskan dalam artikel proteksi dan page setup
Apa yang disertifikasi ini, dan apa yang tidak
Ia menyertifikasi bahwa gambar informatif mencapai teknologi bantu dengan deskripsi yang disediakan penulisnya, dan bahwa pemetaan konten-ke-struktur benar, bukan sekadar ada. Ia tidak membuat output PDF/UA sesuai, dan menggambarkannya demikian adalah klaim yang tidak dapat didukung implementasi: grafik masih artifact, dan pernyataan kesesuaian penuh mensyaratkan audit setiap tipe struktur, setiap font, dan metadata dokumen secara keseluruhan
Jika kebutuhan Anda adalah profil arsip atau kesesuaian alih-alih peningkatan aksesibilitas, itu konfigurasi ekspor berbeda dan set pemeriksaan berbeda, dijelaskan dalam artikel ekspor arsip PDF/A. Keduanya bisa digabung, tetapi keduanya menjawab auditor yang berbeda
Satu saran praktis untuk pipeline pelaporan: audit teks alternatif pada titik di mana workbook dibuat, bukan pada saat ekspor. Generator tahu apa yang diwakili setiap gambar grafik atau diagram tertanam, dan bisa menulis deskripsi sungguhan ke AltText; lintasan saat ekspor hanya bisa memberi tahu Anda bahwa sebuah deskripsi hilang. HotXLS membaca dan menulis XLS, XLSX, ODS, dan CSV secara native dari Delphi dan C++Builder tanpa dependensi Excel, dan opsi konfigurasi ekspornya tercantum di halaman produk HotXLS Delphi spreadsheet component