Pokročilé vykreslování a export
Cesty PDF, SVG, bitmap, metafile, náhledu a tisku sdílejí jeden model stránkování a backendově neutrální geometrii při zachování formátově specifických kodérů
Vlastní grafické backendy
TXLSGraphicsTextAlign definuje zarovnání textu vlevo, na střed a vpravo pro TXLSGraphicsBackend; stylované kreslicí operace přebírají zbývající sdílené výčty — styly písma (TXLSGraphicsFontStyles), konce čar (TXLSGraphicsLineCap), vzory čárkování (TXLSGraphicsLineDash) a svislé zarovnání textu (TXLSGraphicsTextVAlign)
| Životní cyklus stránky | BeginPage a EndPage |
| Primitiva | FillRect, StrokeRect, DrawLine, DrawStyledLine, DrawEllipse, DrawPath, DrawText, DrawStyledText, DrawCellText a DrawImage |
| Vstupní bod stránkování | TXLSPaginationModel.RenderPageToBackend odešle jednu logickou stránku libovolné implementaci backendu |
Implementace dostávají souřadnice v bodech, vyřešené efekty textu a obrázků, oříznutí a umístění kresby v rámci stránky, aniž by musely opakovat logiku rozvržení sešitu. Každý výkres na logické stránce přichází jako záznam TXLSPageDrawingPlacement, jehož Kind (TXLSPageDrawingKind: xpdkImage, xpdkChart, xpdkTextBox, xpdkShape, xpdkControl) říká backendu, co se zrovna kreslí; dlaždice pozadí listu přicházejí jako dekódovaná TXLSSheetBackgroundRenderData
Geometrie vykreslování patřící operaci
TXLSPaginationModel.RenderBackend volí identitu backendu, kterou zachytí následující volání Build, a RenderGeometry zpřístupňuje výslednou neměnnou kalibraci, generaci sešitu, backend a stav cache metrik s pevnou kapacitou; aktivní relace vykreslování se předává jako katalog TXLSRenderSession a zásada barev je TXLSRenderColorMode (xlsrcColor nebo xlsrcMonochrome)
Modely PDF používají xlsrgbPdf, SVG xlsrgbSvg, obrázky stránek xlsrgbBitmap, modely tisku a náhledu tisku xlsrgbPrintPreview a TXLSWorkbookViewer používá xlsrgbViewer; PaginationModel komponent SVG, obrázků, tisku i prohlížeče zpřístupňuje aktivní model pro diagnostiku, aniž by přecházelo vlastnictví
Klasické i XLSX vstupní body HTML zachytávají xlsrgbHtml; TXLSHTMLExport.RenderGeometry zpřístupňuje nejnovější snímek pořízený z Classic, zatímco TXLSXHtmlExportSession.RenderGeometry zpřístupňuje snímek udržovaný napříč všemi listy při přírůstkovém exportu
Výstup sloupců HTML převádí model šířky znaku sešitu přes maximální šířku číslice písma Normal a nastavené měřítko obrazovky, než vypustí pevnou délku v CSS pixelech; převod bodů a pixelů používá stejnou zachycovanou měřicí DPI
Každá operace si drží svou zachycenou kalibraci, i kdyby se sešit později změnil, a vykreslování nikdy nezapisuje výšky řádků ani šířky sloupců listu. Stránkování staví stránky z objektů TXLSLogicalPage, jejichž výkresy, orientace (TXLSPageOrientation: xpoPortrait nebo xpoLandscape) a umístění komentářů (TXLSPrintComments: xpcNone nebo xpcAtEnd) pocházejí z vyřešeného nastavení stránky
Logická stránka zpřístupňuje vše, co backend nebo callback potřebuje: identitu (DocumentPageNumber, SheetPageNumber, SheetName, vlastnící ClassicWorksheet nebo XlsxWorksheet), geometrii (PageWidth, PageHeight, Scale a hodnoty LeftMargin, RightMargin, TopMargin, BottomMargin, HeaderMargin a FooterMargin), obdélník dat (DataFirstRow, DataLastRow, DataFirstCol, DataLastCol) s tiskovými nadpisy (RepeatFirstRow, RepeatLastRow, RepeatFirstCol, RepeatLastCol), umístění pozadí (BackgroundOffsetX, BackgroundOffsetY), výstup mřížky (PrintGridlines, GridlineColor), šest textů pásů záhlaví a zápatí (LeftHeader, CenterHeader, RightHeader, LeftFooter, CenterFooter, RightFooter) a kostry řádků a sloupců stránky (RowCount s Rows a RowEdges, ColumnCount s Columns a ColumnEdges) plus její seznam výkresů (DrawingCount a Drawings). ExpandHeaderFooter vyhodnocuje formátové kódy záhlaví a zápatí vůči stránce a ExpandHeaderFooterStyled navíc vrací výchozí velikost písma v bodech a barvu, aby vlastní malíři dokázali napodobit vykreslení záhlaví, které používá Excel
Vykreslování pozadí listu
Prohlížeč sešitu zobrazuje platná pozadí listů Classic i XLSX jako opakující se dlaždice pod nevyplněnými buňkami, zatímco explicitní a podmíněné výplně buněk zůstávají nad pozadím
TXLSPaginationModel, TXLSSvgExport, TXLSPageImageExporter, TXLSPrintDocument, TXLSPDFExport, TXLSHTMLExport, TXLSXHtmlExportOptions a TXLSWorkbookViewer zpřístupňují ExportSheetBackgroundImages; výchozí hodnota je False pro výstup tisku, náhledu, metafile, PDF, SVG, bitmapy i HTML. Listy ukládají svá data v obrazovém formátu TXLSSheetBackgroundFormat a dekódované bajty se přenášejí jako TXLSSheetBackgroundResource indexovaný generací, DPI a barevným režimem
Zapnutý stránkovaný výstup ukotví fázi dlaždic ke souřadnicím listu napříč hranicemi stránek a pro relaci vykreslování si ponechá jeden dekódovaný obrázek na kombinaci listu, generace zdroje, backendu, DPI a barevného režimu; BackgroundDecodeCount zpřístupňuje celkový počet dekódování pro diagnostiku a poškozená data se přeskočí s diagnostikou sešitu. Aktivní TXLSRenderSession onu sdílenou cache spravuje sama: AcquireBackground získá (nebo jednou dekóduje) dlaždicová data TXLSSheetBackgroundRenderData pro list, DrawTiledBackground je vykreslí přes oříznutou oblast stránky a DecodeCount hlásí, kolik dat bylo zatím dekódováno
Politika zobrazování objektů sešitu
ObjectDisplayMode volí xlsodmShowAll, xlsodmShowPlaceholders nebo xlsodmHideAll pro sešity klasického XLS i XLSX; prohlížeč spotřebuje všechny tři stavy a v režimu zástupných symbolů používá levná políčka s typem, názvem, textem a alternativním textem
Exportéry PDF, SVG, bitmap, fyzického tisku a XLSX HTML se v režimu zástupných symbolů chovají ve výchozím stavu jako výstup plných objektů; pokud chcete políčka bez dekódování obrázků a sestavování scény grafu, nastavte ExportObjectPlaceholders na příslušném exportéru nebo v HTML volbách
xlsodmHideAll je dřívější globální uzávěrka, která zabraňuje sběru výkresů, rozšiřování rozsahů řízenému objekty, testování zásahů a vykreslování médií; pozadí listu, ikony podmíněného formátování, obrázky v záhlaví či zápatí, buňky a filtry tisku objektů specifické pro exportér zůstávají nezávislé
Osy dat grafů citlivé na kalendář
Grafy XLSX, jejichž osa kategorií používá xlsxAxisDate, mapují každou platnou kategorii přes systém dat od roku 1900 nebo 1904 podle sešitu a zachovávají skutečné vzdálenosti mezi řídkými daty místo rovnoměrného rozdělení bodových pozic
BaseTimeUnit řídí normalizaci na dny, měsíce nebo roky a MajorUnit, MinorUnit, MajorTimeUnit a MinorTimeUnit posouvají dílky po kalendářních jednotkách; měsíční a roční intervaly proto zůstávají zarovnané napříč různě dlouhými měsíci i přestupnými roky
Stejná množina dílků s pevnou horní hranicí zásobuje souřadnicemi, popisky, dílky a požadovanými mřížkovými čarami výstup PDF, SVG, bitmapy, náhledu, tisku i prohlížeče postavený na stránkování, zatímco XLSX HTML používá sdílenou kalendářní aritmetiku pro svá vložená SVG grafy
Samostatný zapisovač PDF
TXLSPDFWriter vytváří dokumenty PDF, které nevznikly ze sešitu — faktury, jízdenky, štítky, překrývací formuláře; BeginDoc nastaví rámeček stránky s přesností na body, NewPage uzavře aktuální stránku a SaveToStream nebo SaveToFile dokument dokončí
Kreslicí metody používají body PDF od levého dolního rohu a barvy knihovny ve tvaru $00BBGGRR nebo $AABBGGRR; dostupná primitiva pokrývají FillRectangle, StrokeRectangle, ClipRectangle, MeasureText, SaveGraphicsState a RestoreGraphicsState pro plněné a obtažené obdélníky, čáry, elipsy, stylovaný text s přesným měřením šířky, afinní transformace, obdélníkové oříznutí a explicitní uložení či obnovení grafického stavu, zatímco PageWidth a PageHeight vrací aktuální rámeček stránky v bodech
Export SVG
TXLSSvgExport poskytuje sedm přetížení SaveAsSVG pro klasické a XLSX rozsahy, listy, sešity a připravené logické stránky, a navíc výstup pojmenovaných objektů tam, kde je podporován
UseWorksheetPageSetup, Orientation a Margin používají stejná rozhodnutí nastavení stránky jako výstup PDF a náhledu
TXLSSvgExport.PrintComments (typ TXLSPrintComments) volí, jak se komentáře buněk vypisují ve stránkovaném výstupu SVG; při xpcAtEnd poslední stránka listu připojí výpis komentářů (adresa buňky, autor a text) pod oblast dat, zatímco xpcNone komentáře vynechá
ExportPages posílá po jednom kompletním dokumentu SVG přes OnPage, hlásí počet potvrzených stránek přes ExportedPageCount a při zrušení z callbacku zastaví generování dalších stránek; IdPrefix vytváří deterministické jmenné prostory dokumentu a stránek pro cesty oříznutí, filtry, vzory a sdílené zdroje
HyperlinkMode (typ TXLSSvgHyperlinkMode) s xshmSafe přidává za vizuální obsah oříznuté průhledné zásahové oblasti; povolená externí schémata jsou HTTP, HTTPS, mail, FTP a relativní odkazy, zatímco aktivní, lokální, UNC a cíle s řídicími znaky se vynechají; LinksInNewWindow přidává ochranu noopener noreferrer a ToolTippy se stávají titulkem SVG
Přírůstkový výstup PNG, JPEG a vícestránkový TIFF
TXLSPageImageFormat vybírá výstup PNG nebo JPEG a TXLSPageImageExporter udržuje jednu relaci stránkování naživu a přitom promptně uvolňuje každou dokončenou bitmapu
| Relace | Šest přetížení BeginExport přijímá klasické nebo XLSX rozsahy, listy a sešity; ExportNext zapíše jednu stránku a EndExport uvolní relaci |
| Vícestránkový TIFF | ExportAllAsTiff zapíše vybrané logické stránky do streamu nebo souboru jako jeden LZW komprimovaný TIFF a zachovává chování průběhu, zrušení a atomického cíle |
| Nastavení stránky | UseWorksheetPageSetup, Orientation, Margin, DefaultRowHeight, PaperWidthOverride a PaperHeightOverride |
| Rastrový výstup | Scale, ImageFormat a JpegQuality, zatímco ExportObjectAsPNG vykreslí jeden objekt výkresu do vlastněného PNG |
| Kompaktní rozsahy | ExportRange vykreslí klasický nebo XLSX rozsah jako jednu těsnou rasterizovanou bitmapu bez papíru, okrajů, záhlaví, zápatí, tiskových nadpisů ani zalomení stránek |
| Události plátna | BeforeRenderPage běží po vyčištění pozadí a AfterRenderPage po vykreslení sešitu, ale před kodováním; snímky PNG, JPEG i TIFF sdílejí stejnou cestu událostí |
| Stav | Active, Aborted, TotalPageCount, PageCount a ExportedPageCount |
Tagovaný PDF a PDF/A
TXLSPDFExport.TagMode povoluje automatickou strukturu dokumentu, tabulek, řádků, buněk záhlaví, datových buněk a informačních obrázků s hustými identifikátory označeného obsahu lokálními pro stránku, přesnými mapováními stromu rodičů, rozsahy sloučených buněk a izolací artefaktů; řádky tiskových nadpisů a řádky záhlaví tabulky se stávají sémantickými buňkami záhlaví, obrázky XLSX s neprázdným AltText se stávají samostatnými prvky Figure s alternativním textem v Unicode a obrázky bez alternativního textu zůstávají dekorativními artefakty
Každá viditelná instance informačního obrázku dostane vlastní prvek Figure a identifikátor označeného obsahu, i když si stejná data obrázku sdílejí jeden XObject PDF; AltTextTitle nenahrazuje chybějící alternativní text, grafy zůstávají artefakty a tato cílená podpora struktury netvrdí úplnou shodu s PDF/UA
TXLSPDFExport.PDFAProfile vybírá PDF/A-1, PDF/A-2 nebo PDF/A-3 na úrovni shody a nebo b; nekompatibilní šifrování, písma, přílohy, průhlednost, podpisy a metadata jsou ověřeny před potvrzením výstupního streamu
TXLSPDFExport.ExportCommentsAsAnnotations umísťuje text autora a komentáře v Unicode na obdélníky zdrojových buněk, zatímco tradiční výstup komentářů na konci zůstává nezávisle konfigurovatelný
UsePDFA je přepínač kompatibility pro PDF/A-1b, zatímco UseXRefStream vybírá streamy křížových referencí tam, kde to zvolený profil umožňuje
Geometrie stránky a výběr
Šest přetížení CalculatePageCount přijímá klasické a XLSX rozsahy, listy nebo sešity bez vytváření objektů PDF
PaperWidth a PaperHeight přepisují rozměry papíru v bodech, LastPage uzavírá výstupní interval číslovaný od 1, Orientation (typ TXLSPDFOrientation) volí výšku nebo šířku stránky, HidePrintObjects (množina TXLSPDFHidePrintObject: xlsPdfHideHeaders, xlsPdfHideFooters) potlačuje vybrané pásy záhlaví nebo zápatí a PageLayout (typ TXLSPDFPageLayout) nastavuje počáteční uspořádání stránek v prohlížeči
Režim stránek PDF a akce při otevření
TXLSPDFExport.PageMode (typ TXLSPDFPageMode) nastavuje, jak PDF prohlížeč při otevření dokumentu uspořádá panely, pomocí xlsPdfModeDefault, xlsPdfModeUseOutlines, xlsPdfModeUseThumbs, xlsPdfModeFullScreen, xlsPdfModeUseOC a xlsPdfModeUseAttachments
OpenAction (typ TXLSPDFOpenAction) volí počáteční chování prohlížeče pomocí xlsPdfOpenNone, xlsPdfOpenPage nebo xlsPdfOpenOutlines. U xlsPdfOpenPage je OpenActionPage cílová stránka číslovaná od 1 (oříznutá na počet stránek) a OpenActionZoom počáteční faktor zvětšení, kde 0 ponechá výchozí přiblížení nebo přizpůsobení prohlížeče
Sdílená adaptivní vektorová geometrie
XLSBuildEllipticArcCubics převádí eliptický oblouk na kubické Bézierovy segmenty rekurzivním vynucením volajícím zvolené meze plochosti; vykreslování PDF, SVG i bitmap používá tuto sdílenou geometrii, takže velké nebo silně excentrické oblouky dostanou více segmentů bez pokuty pro jednoduché oblouky
XLSDecodeVectorScene ověřuje hlavičky EMF a WMF, zarovnání a velikosti záznamů, deklarované součty, přesné umístění EOF a limity zdrojů, aniž by volala přehrávání metafile platformy; nativní whitelist přehrává zásobníky stavu kontextu zařízení s save a restore, mapování okna a viewportu kombinované se světovými transformacemi, tabulky objektů per, štětců a rozšířených per včetně skladových objektů, obdélníky, elipsy, řetězce čar, mnohoúhelníky, lomené čáry a Bézierovy křivky se styly čárkování, závorky cest s průchody výplně, obtažení a kombinovaného obtažení s výplní, zaoblené obdélníky, oblouky, tětivy, výseče a úhlové oblouky přes přesný převod oblouku na Bézier, výplně a ohraničení regionů z omezených obdélníků RGNDATA, omezené úseky textu s písmy, barvami a zarovnáním a omezené obrázky stretch-DIB znovu zakódované jako PNG přes Canvas a SVG, odmítá escape záznamy a ponechává oříznutí a privátní záznamy na stávajícím omezeném záložním řešení
Osnovy PDF a callbacky stránek
Osnovy PDF žijí v kolekci Bookmarks (typ TXLSPDFBookmarks): Add a AddForSheet přidávají položky, Delete jednu odebere a Count s Items vyjmenovávají strom. Každá položka TXLSPDFBookmark podporuje nadřazené a podřazené položky (Children), řetězce sourozenců, tituly v Unicode, barvy (Color), cíl PageNumber, zdrojové SheetName pro záložky listu a příznaky tučného nebo kurzívního řezu (množina TXLSPDFBookmarkStyle: xlsPdfBookmarkBold, xlsPdfBookmarkItalic) plus rozbalené nebo sbalené potomky; automatické záložky listů používají stejný model hierarchie a AutoSheetBookmarks přepínají jejich generování
BeforeNewPage může upravit rámeček každé stránky, zatímco BeforeGeneratePage a AfterGeneratePage kreslí obsah pozadí nebo překrytí přes veřejné pomocné metody stránky AppendPageContent, FillPageRectangle, StrokePageRectangle a DrawPageText
Podpisy a přílohy
TXLSPDFSignature konfiguruje viditelná nebo neviditelná pole podpisu, zatímco CertificationPolicy volitelně vytvoří certifikační podpis DocMDP povolující žádné změny, plnění a podepisování formulářů, nebo plnění, podepisování a anotace formulářů; PDF/A-1 tuto funkci PDF 1.5 nepovoluje a odmítne ji dřív, než se potvrdí výstup
TXLSPDFCertificationPolicy poskytuje xlsPdfApprovalSignature, xlsPdfCertifyNoChanges, xlsPdfCertifyFormFillingAndSigning a xlsPdfCertifyFormFillingSigningAndAnnotations pro explicitní volbu politiky podpisu
Událost TXLSPDFSignDigestEvent obdrží otisk a vrací data CMS vytvořená hostitelem, takže HotXLS nikdy nepotřebuje soukromý klíč
TXLSPDFExport.Signature připojuje konfiguraci podpisu a profily PDF/A-3 mohou přes AddAttachment obsahovat ověřené přidružené soubory, které zařadí položku TXLSPDFAttachment; detailní přetížení přijímá zobrazovaný název v Unicode, MIME typ, popis, čas změny, data a hodnotu TXLSPDFAttachmentRelationship Source, Data, Alternative, Supplement nebo Unspecified, zatímco AttachmentCount hlásí celkový počet zařazených příloh a AttachmentDuplicatePolicy (typ TXLSPDFAttachmentDuplicatePolicy) volí, jak se nakládá s duplicitními názvy
TXLSPDFSignature.ImageData, ImageFormat a ImageFit (typ TXLSPDFSignatureImageFit: contain, cover nebo stretch) umístí PNG do Form normálního vzhledu dřív, než se zmrazí rozsah bajtů; režimy contain, cover a stretch sdílejí cache obrázků dokumentu a neplatné obrázky selžou ještě před podepsáním
Přetížení s IXLSPDFAttachmentSource zůstává líné do uložení, zavolá každý zdroj jednou za uložení a před vytvořením objektu EmbeddedFile napíše na dočasný disk nanejvýš 256 MiB, takže selhání poskytovatele zanechá transakci cíle nedotčenou
Závěrečné sestavení zapisuje objekty do cíle postupně místo skládání jednoho řetězce pro celý dokument: exporty bez podpisu proudí přímo do streamů umožňujících jen dopisování, každý EmbeddedFile odkazuje na svou velikost v bajtech přes nepřímý objekt /Length vydaný za daty a bajty poskytovatele se kopírují z dočasného souboru v pevných dávkách; exporty s podpisem se sestavují do omezeného dočasného souboru dokumentu, který obdrží záplaty ByteRange a obsahu podpisu, inkrementální SHA-256 přes dva kryté rozsahy a jedinou kopii dopředu
Výstup PDF/A-3 zapisuje každý přidružený soubor do stromu jmen EmbeddedFiles i do pole AF katalogu, s názvem UF v Unicode, escapovaným PDF Name MIME typu, AFRelationship, velikostí v bajtech, volitelným datem změny a volitelným popisem; PDF/A-1 a PDF/A-2 odmítnou zařazené přílohy dřív, než potvrdí výstup
Metadata dokumentu
DocumentTitle, DocumentAuthor, DocumentSubject, DocumentKeywords a DocumentFileName naplňují informační slovníky a metadata PDF
Náhradní písma
TXLSPDFExport.SetFontFallbackChain, AddFontFallback a ClearFontFallbackChains konfigurují úrovně náhrady specifické pro zdrojovou rodinu písma a styl; LoadedFallbackFontCount zpřístupňuje počet řezů v cache a FontFallbackSelectionCacheCount počet uložených rozhodnutí o náhradě pro jednotlivé volby, obojí pro diagnostiku
TXLSPDFExport.FontSize nastavuje výchozí velikost textu v bodech, implicitně 9
Výběr náhrady používá pokrytí glyfů a zachovává mapování Unicode, doplňkové skaláry, shluky grafémů, tvarovací shluky a samostatné řezy TTC
OnGetFontDirectories může pro požadovanou rodinu a styl vrátit jeden nebo více adresářů písem oddělených středníkem; přijaté adresáře se jednou projdou rekurzivně, seindexují podle interních metadat rodiny a stylu a uloží do cache pro následné měření a kreslení
Politika vkládání písem
TXLSPDFExport.FontEmbedding (typ TXLSPDFFontEmbedding) volí automatické vkládání, požadované řezení podmnožiny, kompletní fontový program, nebo výstup jen s mapami pomocí xlsPdfFontEmbedAuto, xlsPdfFontEmbedSubset, xlsPdfFontEmbedFull a xlsPdfFontEmbedNone; požadované řezení selže atomicky, když nelze vyrobit platnou podmnožinu, řezy TTC se převedou na samostatná písma a PDF/A odmítá výstup jen s mapami
OnFontEmbed se vyvolá jednou za řez Unicode, než se vyhodnotí jeho metrika, znaková mapa, tvarování a identifikátory glyfů; nastavení Handled přijme vrácený režim pro dané písmo a volitelná nahrazující data, zatímco ponechání false zachová politiku dokumentu a původní řez
Samostatná písma OpenType s CFF obrysy se vkládají přes FontFile3 se streamem OpenType a potomkem CIDFontType0; automatický a plný režim ponechávají kompletní program, zatímco požadované řezení CFF atomicky selže, protože nedokáže zachovat platnou podmnožinu
Vložená písma nesoucí OpenType data GPOS nebo starší kern používají pozicované posuny glyfů pro jednoduchý i složitý text, takže měření, zalamování, zarovnání a vypuštěné pozice glyfů sdílejí stejný výsledek kerningu
Průběh a zrušení
TXLSPDFExport.OnProgress a OnProgressEx hlásí fáze začátku, stránky a konce; Cancel vyžaduje zrušení a Aborted hlásí konečný stav bez potvrzení částečného streamu