Pokročilé vykresľovanie a export
Cesty PDF, SVG, bitmapy, metafile, náhľadu a tlače zdieľajú jeden model stránkovania a backendovo neutrálnu geometriu, pričom každý formát si ponecháva svoj špecifický kodér
Vlastné grafické backendy
TXLSGraphicsTextAlign definuje zarovnanie textu vľavo, na stred a vpravo pre TXLSGraphicsBackend; štýlované kresliace volania používajú zvyšné zdieľané enumerátory — štýly písma (TXLSGraphicsFontStyles), koncovky čiar (TXLSGraphicsLineCap), čiarkované vzory (TXLSGraphicsLineDash) a zvislé zarovnanie textu (TXLSGraphicsTextVAlign)
| Životný cyklus stránky | BeginPage a EndPage |
| Primitívy | FillRect, StrokeRect, DrawLine, DrawStyledLine, DrawEllipse, DrawPath, DrawText, DrawStyledText, DrawCellText a DrawImage |
| Vstupný bod stránkovania | TXLSPaginationModel.RenderPageToBackend odošle jednu logickú stránku ľubovoľnej implementácii backendu |
Implementácie dostávajú súradnice v bodoch, vyriešené efekty textu a obrázkov, orezanie a umiestnenie kresby v rámci stránky, bez toho, aby museli opakovať logiku rozloženia zošita. Každý kresliaci objekt na logickej stránke prichádza ako záznam TXLSPageDrawingPlacement, ktorého Kind (TXLSPageDrawingKind: xpdkImage, xpdkChart, xpdkTextBox, xpdkShape, xpdkControl) hovorí backendu, čo sa kreslí; dlaždice pozadia hárka prichádzajú dekodované ako TXLSSheetBackgroundRenderData
Geometria vykresľovania vlastnená operáciou
TXLSPaginationModel.RenderBackend vyberá identitu backendu, ktorú zachytí nasledujúce volanie Build, a RenderGeometry sprístupňuje výslednú nemennú kalibráciu, generáciu zošita, backend a obmedzený stav metrickej cache; aktívna relácia vykresľovania sa prenáša ako handle TXLSRenderSession a politika farieb je TXLSRenderColorMode (xlsrcColor alebo xlsrcMonochrome)
Modely PDF používajú xlsrgbPdf, SVG xlsrgbSvg, obrázky stránok xlsrgbBitmap, modely tlače a náhľadu tlače xlsrgbPrintPreview a TXLSWorkbookViewer používa xlsrgbViewer; PaginationModel komponentov SVG, obrázka, tlače a prehliadača sprístupňuje aktívny model na diagnostiku bez prenosu vlastníctva
Kľúčové body Classic a XLSX HTML zachytávajú xlsrgbHtml; TXLSHTMLExport.RenderGeometry sprístupňuje najnovšiu snímku Classic, zatiaľ čo TXLSXHtmlExportSession.RenderGeometry sprístupňuje snímku zachovanú naprieč všetkými hárkami inkrementálneho exportu
Výstup stĺpcov HTML prevádza model šírky znaku zošita cez maximálnu šírku číslice písma Normal a nakonfigurované škálovanie obrazovky, než emituje pevnú dĺžku v CSS pixeloch; prevod bodov a pixelov používa tú istú zachytenú meraciu DPI
Každá operácia si drží kalibráciu, ktorú zachytila, aj keby sa zošit neskôr zmenil, a vykresľovanie nikdy nezapisuje výšky riadkov ani šírky stĺpcov hárka. Stránkovanie stavia stránky z objektov TXLSLogicalPage, ktorých kresby, orientácia (TXLSPageOrientation: xpoPortrait alebo xpoLandscape) a umiestnenie komentárov (TXLSPrintComments: xpcNone alebo xpcAtEnd) vychádzajú z vyriešeného nastavenia strany
Logická stránka expose všetko, čo backend alebo callback potrebuje: identitu (DocumentPageNumber, SheetPageNumber, SheetName, vlastnený ClassicWorksheet alebo XlsxWorksheet), geometriu (PageWidth, PageHeight, Scale a hodnoty LeftMargin, RightMargin, TopMargin, BottomMargin, HeaderMargin a FooterMargin), dátový obdĺžnik (DataFirstRow, DataLastRow, DataFirstCol, DataLastCol) s tlačovými nadpismi (RepeatFirstRow, RepeatLastRow, RepeatFirstCol, RepeatLastCol), umiestnenie pozadia (BackgroundOffsetX, BackgroundOffsetY), výstup mriežky (PrintGridlines, GridlineColor), šesť textov pásov hlavičky a päty (LeftHeader, CenterHeader, RightHeader, LeftFooter, CenterFooter, RightFooter) a kostry riadkov a stĺpcov stránky (RowCount s Rows a RowEdges, ColumnCount s Columns a ColumnEdges) plus jej zoznam kresieb (DrawingCount a Drawings). ExpandHeaderFooter vyrieši formátové kódy hlavičky a päty voči stránke a ExpandHeaderFooterStyled navyše reportuje počiatočnú veľkosť v bodoch a farbu, aby vlastní maliari vedeli zosúladiť vykreslenie hlavičky s Excelom
Vykresľovanie pozadia hárka
Prehliadač zošita zobrazuje platné pozadia hárkov Classic i XLSX ako opakujúce sa dlaždice pod nevyplnenými bunkami, zatiaľ čo explicitné a podmienené výplne buniek ostávajú nad pozadím
TXLSPaginationModel, TXLSSvgExport, TXLSPageImageExporter, TXLSPrintDocument, TXLSPDFExport, TXLSHTMLExport, TXLSXHtmlExportOptions a TXLSWorkbookViewer expose ExportSheetBackgroundImages; predvolená hodnota je False pre tlač, náhľad, metafile, PDF, SVG, bitmapu aj HTML výstup. Hárky ukladajú payload s formátom obrázka TXLSSheetBackgroundFormat a dekodované bajty sa prenášajú ako TXLSSheetBackgroundResource kľúčovaný generáciou, DPI a farebným režimom
Povolený stránkovaný výstup ukotvuje fázu dlaždíc na súradnice hárka naprieč hranicami stránok a pre reláciu vykresľovania uchováva jeden dekodovaný obrázok na kombináciu hárka, generácie zdroja, backendu, DPI a farebného režimu; BackgroundDecodeCount sprístupňuje celkový počet dekodovaní na diagnostiku a poškodené payloady sa preskakujú s diagnostikou zošita. Aktívna TXLSRenderSession spravuje zdieľanú cache sama: AcquireBackground získa (alebo raz dekóduje) dlaždicové TXLSSheetBackgroundRenderData pre hárok, DrawTiledBackground ich vykreslí cez orezanú oblasť stránky a DecodeCount reportuje, koľko payloadov zatiaľ dekódovala
Politika zobrazovania objektov zošita
ObjectDisplayMode vyberá xlsodmShowAll, xlsodmShowPlaceholders alebo xlsodmHideAll pre klasické XLS aj XLSX zošity; prehliadač spotrebúva všetky tri stavy a v režime placeholderov používa lacné rámečky s typom, názvom, textom a alternatívnym textom
Exportéry PDF, SVG, bitmapy, fyzickej tlače a XLSX HTML berú režim placeholderov štandardne ako výstup plných objektov; ak chcete rámečky bez dekodovania obrázkov alebo konštrukcie scény grafu, nastavte ExportObjectPlaceholders na príslušnom exportéry alebo vo voľbách HTML
xlsodmHideAll je skorá globálna brána, ktorá zabraňuje zberu kresieb, expanzii rozsahov poháňanej objektmi, hit testovaniu a renderovaniu médií; pozadia hárkov, ikony podmieneného formátovania, obrázky hlavičky či päty, bunky a filtrovacie tlačové objekty špecifické pre exportér ostávajú nezávislé
Dátové osi grafov orientované na kalendár
XLSX grafy, ktorých kategóriová os používa xlsxAxisDate, mapujú každú platnú kategóriu cez systém sériových dátumov 1900 alebo 1904 príslušného zošita a zachovávajú skutočnú vzdialenosť medzi riedkymi dátumami namiesto priraďovania rovnako veľkých bodových slotov
BaseTimeUnit riadi normalizáciu na dni, mesiace alebo roky a MajorUnit, MinorUnit, MajorTimeUnit a MinorTimeUnit posúvajú dieliky po kalendárnych jednotkách; mesačné a ročné intervaly preto ostávajú zarovnané naprieč nerovnakými dĺžkami mesiacov aj prestupnými rokmi
Tá istá obmedzená kolekcia dielikov dodáva súradnice, popisky, dieliky a požadované čiary mriežky pre výstup PDF, SVG, bitmapy, náhľad, tlač a prehliadač postavený na stránkovaní, zatiaľ čo XLSX HTML používa zdieľanú kalendárnu aritmetiku pre svoj inline SVG graf
Samostatný zápisovač PDF
TXLSPDFWriter vytvára PDF dokumenty, ktoré nevznikli zo zošita — faktúry, lístky, štítky, prekryvné formuláre; BeginDoc nastaví rámeček stránky s presnosťou na body, NewPage uzatvorí aktuálnu stránku a SaveToStream alebo SaveToFile dokument dokončia
Kresliace metódy používajú PDF body od ľavého dolného roha a farby knižnice v tvare $00BBGGRR alebo $AABBGGRR; dostupné primitívy pokrývajú FillRectangle, StrokeRectangle, ClipRectangle, MeasureText, SaveGraphicsState a RestoreGraphicsState pre výplňové a obrysované obdĺžniky, čiary, elipsy, štýlovaný text s presným meraním šírky, afinné transformácie, obdĺžnikové orezanie a explicitné uloženie alebo obnovenie grafického stavu, pričom PageWidth a PageHeight reportujú aktuálny rámeček stránky v bodoch
Export SVG
TXLSSvgExport poskytuje sedem preťažení SaveAsSVG pre klasické a XLSX rozsahy, hárky, zošity a pripravené logické stránky, a navyše výstup pomenovaných objektov tam, kde je to podporované
UseWorksheetPageSetup, Orientation a Margin používajú rovnaké rozhodnutia nastavenia stránky ako výstup PDF a náhľad
TXLSSvgExport.PrintComments (typ TXLSPrintComments) vyberá, ako sa komentáre buniek emitujú pri stránkovanom SVG výstupe; pri xpcAtEnd posledná stránka hárka pripojí pod dátovú oblasť zoznam komentárov (adresa bunky, autor a text), zatiaľ čo xpcNone komentáre vynecháva
ExportPages posiela po jednom kompletnom SVG dokumente cez OnPage, reportuje počet odovzdaných stránok cez ExportedPageCount a pri zrušení callbackom zastaví skôr, než vygeneruje neskoršie stránky; IdPrefix vytvára deterministické namespace dokumentu a stránok pre cesty orezania, filtre, vzory a zdieľané zdroje
HyperlinkMode (typ TXLSSvgHyperlinkMode) s xshmSafe pridáva za vizuálny obsah orezané priehľadné zásahové oblasti; povolené externé schémy sú HTTP, HTTPS, mail, FTP a relatívne odkazy, zatiaľ čo aktívne, lokálne, UNC a ciele s riadiacimi znakmi sa vynechávajú; LinksInNewWindow pridáva ochranu noopener noreferrer a tipy obrazovky sa stanú SVG titulkami
Inkrementálny výstup PNG, JPEG a viacstránkového TIFF
TXLSPageImageFormat vyberá výstup PNG alebo JPEG a TXLSPageImageExporter udržiava jednu živú reláciu stránkovania a súčasne promptne uvoľňuje každú dokončenú bitmapu
| Relácia | Šesť preťažení BeginExport prijíma klasické alebo XLSX rozsahy, hárky a zošity; ExportNext zapíše jednu stránku a EndExport uvoľní reláciu |
| Viacstránkový TIFF | ExportAllAsTiff zapíše vybrané logické stránky do toku alebo súboru ako jeden LZW-komprimovaný TIFF a zároveň zachová sémantiku priebehu, zrušenia a atomickej destinácie |
| Nastavenie stránky | UseWorksheetPageSetup, Orientation, Margin, DefaultRowHeight, PaperWidthOverride a PaperHeightOverride |
| Rastrový výstup | Scale, ImageFormat a JpegQuality; ExportObjectAsPNG vykreslí jeden kresliaci objekt do vlastneného PNG |
| Kompaktné rozsahy | ExportRange vykreslí klasický alebo XLSX rozsah ako jednu tesnú rastrovú bitmapu bez papiera, okrajov, hlavičiek, pät, tlačových nadpisov ani zalomení stránok |
| Udalosti canvasu | BeforeRenderPage beží po vyčistení pozadia a AfterRenderPage po vykreslení zošita, ale pred kódovaním; snímkové rámce PNG, JPEG aj TIFF zdieľajú tú istú cestu udalostí |
| Stav | Active, Aborted, TotalPageCount, PageCount a ExportedPageCount |
Tagovaný PDF a PDF/A
TXLSPDFExport.TagMode zapína automatickú štruktúru dokumentu, tabuliek, riadkov, buniek hlavičky, dátových buniek a informačných obrázkov s hustými identifikátormi označeného obsahu lokálnymi pre stránku, presnými mapovaniami stromu rodičov, span zlúčených buniek a izoláciou artefaktov; riadky tlačových nadpisov a hlavičkové riadky tabuliek sa stanú sémantickými bunkami hlavičky, obrázky XLSX s neprázdnym AltText sa stanú samostatnými elementmi Figure s alternatívnym textom v Unicode a obrázky bez alternatívneho textu ostávajú dekoratívnymi artefaktmi
Každá viditeľná inštancia informačného obrázka dostane vlastný element Figure a identifikátor označeného obsahu, aj keď sa rovnaké obrazové payloady delia o jeden XObject PDF; AltTextTitle nenahrádza chýbajúci alternatívny text, grafy ostávajú artefaktmi a táto cielená podpora štruktúry netvrdí, že ide o úplnú zhodu s PDF/UA
TXLSPDFExport.PDFAProfile vyberá PDF/A-1, PDF/A-2 alebo PDF/A-3 na úrovni zhody a alebo b; nekompatibilné šifrovanie, písma, prílohy, priehľadnosť, podpisy a metadáta sú overené pred odovzdaním výstupného toku
TXLSPDFExport.ExportCommentsAsAnnotations umiestňuje text autora a komentára v Unicode na obdĺžniky zdrojových buniek, pričom tradičný výstup komentárov na konci zostáva nezávisle konfigurovateľný
UsePDFA je prepínač kompatibility pre PDF/A-1b, zatiaľ čo UseXRefStream vyberá cross-reference streamy tam, kde ich zvolený profil povoľuje
Geometria a výber stránok
Šesť preťažení CalculatePageCount prijíma klasické a XLSX rozsahy, hárky alebo zošity bez vytvárania PDF objektov
PaperWidth a PaperHeight prepisujú rozmery papiera v bodoch, LastPage uzatvára výstupný interval od jednotky, Orientation (typ TXLSPDFOrientation) vyberá výstup na výšku alebo na šírku, HidePrintObjects (množina TXLSPDFHidePrintObject: xlsPdfHideHeaders, xlsPdfHideFooters) potláča vybrané pásy hlavičky alebo päty a PageLayout (typ TXLSPDFPageLayout) nastavuje počiatočné usporiadanie stránok v prehliadači
Režim stránok PDF a otváracia akcia
TXLSPDFExport.PageMode (typ TXLSPDFPageMode) nastavuje, ako PDF prehliadač usporiada panely pri otvorení dokumentu, cez xlsPdfModeDefault, xlsPdfModeUseOutlines, xlsPdfModeUseThumbs, xlsPdfModeFullScreen, xlsPdfModeUseOC a xlsPdfModeUseAttachments
OpenAction (typ TXLSPDFOpenAction) vyberá počiatočné správanie prehliadača pomocou xlsPdfOpenNone, xlsPdfOpenPage alebo xlsPdfOpenOutlines. Pri xlsPdfOpenPage je OpenActionPage cieľová stránka od jednotky (osekaná na počet stránok) a OpenActionZoom počiatočný faktor zväčšenia, pričom 0 ponecháva predvolené priblíženie alebo fit prehliadača
Zdieľaná adaptívna vektorová geometria
XLSBuildEllipticArcCubics prevedie eliptický oblúk na kubické Bézierove segmenty rekurzívnym vynucovaním hranice plochosti zvolenej volajúcim; PDF, SVG aj bitmapové vykresľovanie používajú túto zdieľanú geometriu, takže veľké alebo silne excentrické oblúky dostanú viac segmentov bez toho, aby za to jednoduché oblúky zaplatili
XLSDecodeVectorScene overuje hlavičky EMF a WMF, zarovnanie a veľkosti záznamov, deklarované súčty, presné umiestnenie EOF a limity zdrojov bez volania prehrávania metafile platformy; natívny whitelist prehráva zásobníky stavu device contextu s save a restore, mapovanie okna a viewportu kombinované so svetovými transformáciami, tabuľky objektov peria, štetca a rozšíreného per vrátane stock objektov, obdĺžniky, elipsy, reťazce čiar, mnohouholníky, lomené čiary a Bézierove krivky s čiarkovanými štýlmi, zátvorky ciest s výplňou, obrysom a kombinovanými priechodmi výplne a obrysu, zaoblené obdĺžniky, oblúky, tetivy, výseky a uhlové oblúky cez presný prevod oblúka na Bézierove segmenty, výplne a obrysy oblastí z obmedzených obdĺžnikov RGNDATA, obmedzené textové behy s písmami, farbami a zarovnaním a obmedzené stretch-DIB obrázky znovu zakódované ako PNG cez Canvas a SVG, odmieta escape záznamy a orezávanie aj súkromné záznamy necháva na existujúcom obmedzenom záložnom riešení
Osnovy PDF a callbacky stránok
Osnovy PDF žijú v kolekcii Bookmarks (typ TXLSPDFBookmarks): Add a AddForSheet pridávajú položky, Delete jednu odoberie a Count s Items enumerujú strom. Každá položka TXLSPDFBookmark podporuje nadradené a podradené položky (Children), reťazce súrodencov, tituly v Unicode, farby (Color), cieľ PageNumber, zdrojový SheetName pre osnovy hárkov a príznaky tučného alebo kurzívneho písma (množina TXLSPDFBookmarkStyle: xlsPdfBookmarkBold, xlsPdfBookmarkItalic), plus rozbalených alebo zbalených potomkov; automatické osnovy hárkov používajú ten istý model hierarchie a AutoSheetBookmarks prepína ich generovanie
BeforeNewPage môže upraviť rámeček každej stránky, zatiaľ čo BeforeGeneratePage a AfterGeneratePage kreslia obsah pozadia alebo prekrytia cez verejné pomôcky stránky AppendPageContent, FillPageRectangle, StrokePageRectangle a DrawPageText
Podpisy a prílohy
TXLSPDFSignature konfiguruje viditeľné alebo neviditeľné polia podpisu, pričom CertificationPolicy voliteľne vytvorí certifikačný podpis DocMDP povoľujúci žiadne zmeny, len vypĺňanie a podpisovanie formulárov, alebo vypĺňanie, podpisovanie a anotácie; PDF/A-1 túto funkciu PDF 1.5 nepovoľuje a taká kombinácia sa odmietne skôr, než sa výstup odovzdá
TXLSPDFCertificationPolicy poskytuje xlsPdfApprovalSignature, xlsPdfCertifyNoChanges, xlsPdfCertifyFormFillingAndSigning a xlsPdfCertifyFormFillingSigningAndAnnotations na explicitný výber politiky podpisu
TXLSPDFSignDigestEvent prijíma digest a vracia hostiteľom vytvorené dáta CMS, takže HotXLS nikdy nepotrebuje súkromný kľúč
TXLSPDFExport.Signature pripája konfiguráciu podpisu a profily PDF/A-3 môžu cez AddAttachment obsahovať validované priradené súbory, ktorý zaradí do frontu TXLSPDFAttachment; detailné preťaženie prijíma zobrazovaný názov v Unicode, MIME typ, popis, čas úpravy, payload a hodnotu TXLSPDFAttachmentRelationship Source, Data, Alternative, Supplement alebo Unspecified, pričom AttachmentCount reportuje celkový počet vo fronte a AttachmentDuplicatePolicy (typ TXLSPDFAttachmentDuplicatePolicy) vyberá zaobchádzanie s rovnakými názvami
TXLSPDFSignature.ImageData, ImageFormat a ImageFit (typ TXLSPDFSignatureImageFit: contain, cover alebo stretch) umiestnia PNG do normálneho vzhľadu Form skôr, než sa byte range zmrazí; režimy contain, cover a stretch zdieľajú cache obrázkov dokumentu a neplatné obrázky zlyhajú pred podpisom
Preťaženie IXLSPDFAttachmentSource ostáva lazy do uloženia, zavolá každý zdroj raz na uloženie a naplní najviac 256 MiB skôr, než sa vytvorí objekt EmbeddedFile, takže zlyhania providera ponechajú transakciu destinácie nezmenenú
Záverečné zostavenie zapisuje objekty do destinácie sekvenčne namiesto stavby jedného reťazca celého dokumentu: nepodpísané exporty prúdia priamo do dopredných tokov, každý EmbeddedFile odkazuje na svoju veľkosť v bajtoch nepriamym objektom /Length emitovaným za payloadom a bajty providera sa kopírujú zo spoolu v pevných dávkach; podpísané exporty sa skladajú do obmedzeného spoolu dokumentu, ktorý prijme patche ByteRange a obsahu podpisu, inkrementálny SHA-256 cez dva pokryté rozsahy a jediné dopredné kopírovanie
Výstup PDF/A-3 zapisuje každý priradený súbor do stromu názvov EmbeddedFiles aj do poľa AF katalógu, s Unicode názvom UF, escapovaným MIME PDF Name, AFRelationship, veľkosťou v bajtoch, voliteľným dátumom úpravy a voliteľným popisom; PDF/A-1 a PDF/A-2 odmietnu prílohy vo fronte skôr, než sa výstup odovzdá
Metadáta dokumentu
DocumentTitle, DocumentAuthor, DocumentSubject, DocumentKeywords a DocumentFileName napĺňajú slovníky informácií a metadát PDF
Fallback písiem
TXLSPDFExport.SetFontFallbackChain, AddFontFallback a ClearFontFallbackChains konfigurujú úrovne fallbacku pre zdrojové rodiny a špecifické štýly; LoadedFallbackFontCount sprístupňuje počet cacheovaných strihov písma a FontFallbackSelectionCacheCount počet cacheovaných rozhodnutí o fallbacku pre jednotlivé výbery, obe na diagnostiku
TXLSPDFExport.FontSize nastavuje predvolenú veľkosť textu v bodoch, predvolene 9
Výber fallbacku používa pokrytie glyfov a zachováva Unicode mapovania, doplnkové skaláry, zhluky grafém, zhluky tvarovania a samostatné strihy TTC
OnGetFontDirectories môže pre požadovanú rodinu a štýl vrátiť jeden alebo viac adresárov písiem oddelených bodkočiarkou; akceptované adresáre sa raz prehľadajú rekurzívne, indexujú sa podľa interných metadát rodiny a štýlu a cacheujú sa pre nasledovné meranie aj kreslenie
Politika vkladania písiem
TXLSPDFExport.FontEmbedding (typ TXLSPDFFontEmbedding) vyberá automatické vloženie, povinné subsetovanie, kompletný fontový program alebo výstup len s mapou cez xlsPdfFontEmbedAuto, xlsPdfFontEmbedSubset, xlsPdfFontEmbedFull a xlsPdfFontEmbedNone; povinné subsetovanie atómovo zlyhá, keď nemožno vyprodukovať platnú subset, strihy TTC sa prevedú na samostatné písma a PDF/A odmieta výstup len s mapou
OnFontEmbed vystrelí raz na Unicode strih skôr, než sa vyriešia jeho metriky, mapovanie znakov, tvarovanie a identifikátory glyfov; nastavenie Handled prijme vrátený režim pre jednotlivé písma a voliteľné nahradzujúce bajty, zatiaľ čo ponechanie false zachová politiku dokumentu a pôvodný strih
Samostatné OpenType písma s CFF obrysmi sa vkladajú cez FontFile3 so streamom OpenType a potomkom CIDFontType0; automatický a plný režim zachovávajú kompletný program, zatiaľ čo povinné CFF subsetovanie atómovo zlyhá, pretože nedokáže zachovať platnú subset
Vložené písma nesúce OpenType údaje GPOS alebo legacy kern používajú poziciované posuny glyfov pre jednoduchý aj zložitý text, takže meranie, zalamovanie, zarovnanie a emitované pozície glyfov sa delia o ten istý výsledok kerningu
Priebeh a zrušenie
TXLSPDFExport.OnProgress a OnProgressEx hlásia fázy začiatku, stránky a konca; Cancel požaduje zrušenie a Aborted hlási konečný stav bez odovzdania čiastočného toku