HotXLS exportuje sešit nebo jeden list přímo do PDF/A z Delphi a C++Builder, bez Excelu a bez ovladače PDF tiskárny. Nastavte UsePDFA a vyberte profil na TXLSPDFExport a exportovaný soubor ponese vložený ICC profil sRGB jako svůj výstupní záměr, blok identifikace pdfaid ve svých metadatech XMP a hlavičku verze PDF vhodnou pro danou úroveň shody
Tento požadavek obvykle přichází od zásad uchovávání záznamů, ne od vývojáře. Finanční výkazy, laboratorní výsledky, regulatorní podání a cokoli, co musí veřejnoprávní subjekt uchovávat po desítky let, musí být uloženo ve formátu, který se vykreslí identicky i za padesát let, a přesně to má garantovat PDF/A, ISO 19005. Sešit je živý výpočet; archivovaná kopie sešitu musí být pevným obrázkem jednoho stavu
Co dělá z PDF archivační PDF?
Většinu práce odvedou tři požadavky. Soubor musí být soběstačný, takže je vložen každý použitý font a neodkazuje se na žádný externí zdroj. Jeho barva musí být jednoznačná, což znamená výstupní záměr pojmenovávající barevný prostor, pro který byl soubor připraven. A musí se identifikovat sám sebou, přes metadata XMP deklarující číslo části a úroveň shody
HotXLS dodává všechny tři. Profil sRGB je vložen jako streamový objekt se třemi komponentami a DeviceRGB jako alternativou, odkazovaný z výstupního záměru GTS_PDFA1, jehož podmínka i identifikátor pojmenovávají sRGB IEC61966-2.1. Balíček XMP nese položky části a shody pdfaid. Bajty profilu jsou zkompilovány přímo do knihovny, ne načítány za běhu, takže neexistuje žádný nasazovací krok a žádná šance, že by chybějící soubor proměnil archivační export v obyčejný
uses
lxHandleX, lxPDF;
var
Book: TXLSXWorkbook;
Exporter: TXLSPDFExport;
begin
Book := TXLSXWorkbook.Create;
Exporter := TXLSPDFExport.Create;
try
if Book.Open('quarterly-results.xlsx') <> 1 then
Exit;
Exporter.UsePDFA := True;
Exporter.PDFAProfile := xlsPdfA2b; // ISO 19005-2 úroveň B
Exporter.DocumentLanguage := 'en-GB';
Exporter.TagMode := xlsPdfTagsAutomatic;
if Exporter.SaveAsPDF(Book, 'quarterly-results-archive.pdf') <> 1 then
raise Exception.Create('archival export failed');
finally
Exporter.Free;
Book.Free;
end;
end;
Který profil byste měli zvolit?
Výčet profilů pokrývá PDF/A-1, PDF/A-2 a PDF/A-3, každý v přístupné variantě a v základní variantě. Praktické rozdíly jsou užší, než napovídá výčet
Úroveň B, základní varianta, garantuje reprodukovatelný vizuální vzhled. Úroveň A přidává strukturální a sémantické požadavky, především značkovaný strom struktury a definované pořadí čtení, takže je dokument přístupný asistenčním technologiím. Část 2 uvolňuje některá omezení části 1 a povoluje objektové streamy a JPEG 2000; část 3 navíc povoluje libovolné vložené soubory, což je to, co formáty elektronické fakturace používají k přenosu strojově čitelného XML vedle stránky čitelné člověkem
Pro archivovaný sešit je PDF/A-2b pragmatickou výchozí volbou: archivy ho široce přijímají, nevyžaduje disciplínu značkování, kterou úroveň A ukládá na mřížku buněk, a povoluje kompaktní struktury, které brání 200stránkovému exportu sešitu v nabobtnání. Zvolte část 3, když archiv musí nést i zdrojová data jako přílohu, což exportér podporuje přes AddAttachment
Pravidlo o fontech, které chytí většinu lidí
Každý glyf, který soubor PDF/A vykreslí, musí pocházet z vloženého fontu. Toto je jediný nejčastější důvod, proč jinak správný export selže při validaci, a způsob selhání je zákeřný: soubor vypadá správně na stroji, který ho vytvořil, protože ten stroj má daný font nainstalovaný
HotXLS vkládá podmnožiny TrueType pro fonty, které používá, ale cesta záložního fontu base-14 existuje pro případy, kdy font nelze rozřešit, a záložní font base-14 z definice vložený není. Pro archivační výstup nastavte explicitní unicodový soubor fontu, aby se cesta záložního fontu nikdy nepoužila. Mechanismus subsettingu a záložní řetězec popisuje článek subsetting fontů TrueType; praktickým pravidlem je otestovat export na stroji, který nemá vaše firemní fonty nainstalované
Co exportér garantuje a co ne
Přesnost je zde důležitější než sebejistota. Export vytváří identifikační aparát PDF/A — výstupní záměr, vložený ICC profil, metadata pdfaid, vhodnou hlavičku verze — a směruje text přes vkládací cestu. Nespouští úplný validátor nad vlastním výstupem, takže nevynucuje každý zákaz ve specifikaci, jako jsou pravidla o průhlednosti, o určitých typech anotací a o volitelném obsahu
U exportu sešitu se tyto konstrukce vyskytují jen zřídka, což vysvětluje vysokou praktickou úspěšnost. Ale vysoká není totéž co zaručená a pro skutečný archivační pipeline je správnou architekturou export a poté validace nezávislým nástrojem, přičemž selhání validace se zpracovává jako chyba pipeline, ne jako varování. Srovnatelné rozdělení odpovědnosti pro dokumenty PDF popisuje článek preflight validace PDF/A
Rozvržení je součástí archivační věrnosti
Archivovaný sešit, který je technicky vyhovující a přitom vizuálně nečitelný, selhal ve své skutečné úloze. Nastavení stránky nese v archivačním exportu větší váhu než v běžném tisku, protože ho už nikdo nikdy nedokáže přeformátovat
Tři nastavení se vyplatí. Přizpůsobení šířce zabraňuje klasickému selhání, kdy tabulka o 14 sloupcích dorazí jako sedm stránek po dvou sloupcích. Opakující se záhlavní řádky udrží každou stránku čitelnou i samostatně. A explicitní oblasti tisku vylučují pracovní poznámky, které leží mimo skutečná data. Celou sadu ovládacích prvků tisku a nastavení stránky popisuje článek ochrana, nastavení stránky a tisk
// Nastavení stránky připravené pro archiv, aplikované před exportem
Sheet := Book.Sheets[0];
Sheet.PageLandscape := True;
Sheet.FitToWidth := 1;
Sheet.FitToHeight := 0; // tolik stránek na výšku, kolik je potřeba
Sheet.SetPrintArea('A1:N480');
Sheet.PrintTitleRows := '$1:$3';
// Metadata patří do archivu také
Book.Title := 'Quarterly results 2026 Q2';
Book.Author := 'Finance';
Kontrolní seznam před prvním dávkovým během
Potvrďte, že se soubor sám identifikuje: nic nerozbalujte, jen otevřete PDF v textovém editoru a vyhledejte položky části a shody pdfaid a výstupní záměr GTS_PDFA1. Potvrďte fonty: zkontrolujte, že každý font v dokumentu je hlášen jako vložený. Potvrďte vzhled: porovnejte exportované stránky s vytištěnou kopií, protože nastavení přizpůsobení stránce, které tiše zmenší text na čtyři body, je vyhovující a nepoužitelné
Pak spusťte nezávislý validátor nad reprezentativním vzorkem a uchovejte report. Archivy stále častěji žádají o důkaz validace, ne jen o soubor, a jeho vygenerování v čase exportu je mnohem levnější než jeho rekonstrukce o roky později. Pro běžnou, nearchivační cestu exportu a její možnosti vykreslování viz export listu do PDF
Archivační export, nastavení stránky a vykreslovací engine za nimi jsou dodávány v jedné knihovně pro Delphi a C++Builder; úplný seznam funkcí najdete na stránce komponenty HotXLS Delphi spreadsheet component