Разширено рендиране и експорт
Пътищата на PDF, SVG, растерни изображения, метафайлове, преглед и печат споделят един модел на пагинация и неутрална към backend геометрия, като същевременно запазват специфични за формата енкодери
Персонализирани графични backend-ове
TXLSGraphicsTextAlign дефинира ляво, централно и дясно подравняване на текста за TXLSGraphicsBackend; стилизираните извиквания за чертаене приемат останалите споделени изброени типове — стилове на шрифта (TXLSGraphicsFontStyles), краища на линии (TXLSGraphicsLineCap), щрихови модели (TXLSGraphicsLineDash) и вертикално подравняване на текста (TXLSGraphicsTextVAlign)
| Жизнен цикъл на страница | BeginPage и EndPage |
| Примитиви | FillRect, StrokeRect, DrawLine, DrawStyledLine, DrawEllipse, DrawPath, DrawText, DrawStyledText, DrawCellText и DrawImage |
| Точка на влизане в пагинацията | TXLSPaginationModel.RenderPageToBackend изпраща една логическа страница към всяка имплементация на backend |
Имплементациите получават координати в точки, разрешени текстови и образни ефекти, изрязване и позициониране на чертожа в рамките на страницата, без да се налага да повтарят логиката за оформление на работната книга. Всяко чертане върху логическа страница идва като запис TXLSPageDrawingPlacement, чийто Kind (TXLSPageDrawingKind: xpdkImage, xpdkChart, xpdkTextBox, xpdkShape, xpdkControl) казва на backend-а какво точно се рисува; плочките на фона на работния лист идват като декодирани TXLSSheetBackgroundRenderData
Геометрия на рендирането, собственост на операцията
TXLSPaginationModel.RenderBackend избира самоличността на backend-а, прихваната от следващото извикване на Build, а RenderGeometry показва получените непроменливи калибриране, поколение на работната книга, backend и ограничено състояние на метричния кеш; активната сесия на рендиране пътува като дръжка TXLSRenderSession, а политиката за цветове е TXLSRenderColorMode (xlsrcColor или xlsrcMonochrome)
PDF моделите използват xlsrgbPdf, SVG — xlsrgbSvg, изображения на страници — xlsrgbBitmap, моделите за печат и преглед на печат — xlsrgbPrintPreview, а TXLSWorkbookViewer използва xlsrgbViewer; PaginationModel в компонентите за SVG, изображения, печат и зрител показва активния модел за диагностика, без да прехвърля собствеността му
Класическите и XLSX входни точки за HTML прихващат xlsrgbHtml; TXLSHTMLExport.RenderGeometry показва последната класическа мигновена снимка, а TXLSXHtmlExportSession.RenderGeometry показва снимката, запазена през всички листове в един инкрементален експорт
Изходът на HTML колони превръща модела за ширина на знака в работната книга през максималната ширина на цифрата от шрифта Normal и зададеното мащабиране на екрана, преди да издаде фиксирана дължина в CSS пиксели; преобразуването между точки и пиксели използва същата прихваната измервателна DPI стойност
Всяка операция запазва прихванатото от нея калибриране, дори ако работната книга се промени по-късно, а рендирането никога не записва височини на редове или ширини на колони. Пагинацията изгражда страниците от обекти TXLSLogicalPage, чиито чертози, ориентация (TXLSPageOrientation: xpoPortrait или xpoLandscape) и поставяне на коментари (TXLSPrintComments: xpcNone или xpcAtEnd) идват от разчитаната настройка на страницата
Логическата страница предоставя всичко, от което има нужда един backend или callback: самоличност (DocumentPageNumber, SheetPageNumber, SheetName, собственикът ClassicWorksheet или XlsxWorksheet), геометрия (PageWidth, PageHeight, Scale и стойностите LeftMargin, RightMargin, TopMargin, BottomMargin, HeaderMargin и FooterMargin), правоъгълника с данни (DataFirstRow, DataLastRow, DataFirstCol, DataLastCol) със заглавията за печат (RepeatFirstRow, RepeatLastRow, RepeatFirstCol, RepeatLastCol), поставянето на фона (BackgroundOffsetX, BackgroundOffsetY), изхода на мрежовите линии (PrintGridlines, GridlineColor), шестте текста на горния и долния колонтитул (LeftHeader, CenterHeader, RightHeader, LeftFooter, CenterFooter, RightFooter) и скелетите на редовете и колоните на страницата (RowCount с Rows и RowEdges, ColumnCount с Columns и ColumnEdges) плюс списъка ѝ с чертози (DrawingCount и Drawings). ExpandHeaderFooter разчита кодовете за форматиране на колонтитулите спрямо страницата, а ExpandHeaderFooterStyled допълнително съобщава водещия размер на шрифта в точки и цвета, за да могат персонализираните рисувачи да съвпаднат с собственото изобразяване на колонтитули в Excel
Рендиране на фона на работния лист
Зрителят на работни книги показва валидните класически и XLSX фонове на работния лист като повтарящи се плочки под неизпълнените клетки, докато явните и условните запълвания на клетки остават над фона
TXLSPaginationModel, TXLSSvgExport, TXLSPageImageExporter, TXLSPrintDocument, TXLSPDFExport, TXLSHTMLExport, TXLSXHtmlExportOptions и TXLSWorkbookViewer показват ExportSheetBackgroundImages; по подразбиране е False за печат, преглед, метафайл, PDF, SVG, растерни изображения и HTML изход. Работните листове съхраняват товара си с формат на изображение TXLSSheetBackgroundFormat, а декодираните байтове пътуват като TXLSSheetBackgroundResource, индексиран по поколение, DPI и цветови режим
Разрешеният пагиниран изход обвързва фазата на плочката с координатите на работния лист през границите на страниците и задържа по едно декодирано изображение на работен лист, поколение на ресурса, backend, DPI и цветови режим за сесията на рендиране; BackgroundDecodeCount показва общия брой декодирания за диагностика, а повредени товари се пропускат с диагностично съобщение в работната книга. Активната TXLSRenderSession управлява сам споделения кеш: AcquireBackground взема (или декодира веднъж) плочковото TXLSSheetBackgroundRenderData за даден работен лист, DrawTiledBackground го рисува през изрязана област от страницата, а DecodeCount докладва колко товара са декодирани досега
Политика за показване на обектите в работната книга
ObjectDisplayMode избира xlsodmShowAll, xlsodmShowPlaceholders или xlsodmHideAll както за класически XLS, така и за XLSX работни книги; зрителят използва и трите състояния и за режима на заместители чертае евтини кутии с тип, име, текст и алтернативен текст
Експортерите за PDF, SVG, растерни изображения, физически печат и XLSX HTML третират режима на заместители като пълен изход с обекти по подразбиране; задайте ExportObjectPlaceholders на съответния експортер или HTML опции, за да поискате кутии без декодиране на изображения или изграждане на сцена на диаграмата
xlsodmHideAll е по-ранна глобална бариера, която предотвратява събирането на чертози, разширяването на диапазони от обекти, откриването на попадения и рендирането на медия; фонове на работния лист, икони от условно форматиране, изображения в колонтитули, клетки и специфичните за експортера филтри за печатни обекти остават независими
Датови оси на диаграми, съобразени с календара
XLSX диаграмите, чиято ос на категориите използва xlsxAxisDate, изобразява всяка валидна категория през системата за серийни дати 1900 или 1904 на работната книга и запазва реалното разстояние между разределите дати, вместо да им определя равни позиции
BaseTimeUnit управлява нормализацията по дни, месеци или години, а MajorUnit, MinorUnit, MajorTimeUnit и MinorTimeUnit придвижват деленията по календарни единици; затова месечните и годишните интервали остават подравнени при неравни дължини на месеците и високосни години
Същата ограничена колекция от деления осигурява координати, етикети, деления и поисканите линии на мрежата за базирания на пагинация изход към PDF, SVG, растерни изображения, преглед, печат и зрител, а XLSX HTML използва споделената календарна аритметика за вградените SVG диаграми
Самостоятелен PDF writer
TXLSPDFWriter създава PDF документи, които не произлизат от работна книга — фактури, билети, етикети и форми за наслагване; BeginDoc задава кутия на страница с точност в точки, NewPage затваря текущата страница, а SaveToStream или SaveToFile приключват документа
Методите за чертане използват PDF точки от долния ляв ъгъл и цветове на библиотеката във формат $00BBGGRR или $AABBGGRR; наличните примитиви обхващат FillRectangle, StrokeRectangle, ClipRectangle, MeasureText, SaveGraphicsState и RestoreGraphicsState за запълнени и очертани правоъгълници, линии, елипси, стилизиран текст с точно измерване на ширината, афинни трансформации, правоъгълно изрязване и явно запазване или възстановяване на графичното състояние, докато PageWidth и PageHeight докладват текущата кутия на страницата в точки
Експорт в SVG
TXLSSvgExport предоставя седем претоварвания на SaveAsSVG за класически и XLSX диапазони, работни листове, работни книги и подготвени логически страници, плюс изход за именувани обекти, където се поддържа
UseWorksheetPageSetup, Orientation и Margin използват същите решения за настройка на страницата като PDF и изхода за преглед
TXLSSvgExport.PrintComments (тип TXLSPrintComments) избира как коментарите на клетки се издават при пагиниран SVG изход; при xpcAtEnd последната страница на листа добавя списък с коментари (адрес на клетка, автор и текст) под областта с данни, а xpcNone пропуска коментарите
ExportPages изпраща по един пълен SVG документ през OnPage, съобщава броя на финализираните страници чрез ExportedPageCount и спира преди генериране на следващите страници, когато callback-ът отмени; IdPrefix създава детерминирани пространства от имена за документа и страниците — за пътеки на изрязване, филтри, шарки и споделени ресурси
HyperlinkMode (тип TXLSSvgHyperlinkMode) със xshmSafe добавя изрязани прозрачни области за попадение след визуалното съдържание; разрешените външни схеми са HTTP, HTTPS, mail, FTP и относителни връзки, а активни, локални, UNC и цели с контролни знаци се пропускат; LinksInNewWindow добавя защита noopener noreferrer, а подсказките на екрана стават SVG заглавия
Инкрементален PNG, JPEG и многостраничен TIFF изход
TXLSPageImageFormat избира PNG или JPEG изход, а TXLSPageImageExporter поддържа една жива сесия на пагинация, като освобождава всяко завършено растерно изображение своевременно
| Сесия | Шест претоварвания на BeginExport приемат класически или XLSX диапазони, работни листове и работни книги; ExportNext записва една страница, а EndExport освобождава сесията |
| Многостраничен TIFF | ExportAllAsTiff записва избраните логически страници в поток или файл като един TIFF с LZW компресия, като пази семантиките за напредък, отмяна и атомично записване към дестинацията |
| Настройка на страницата | UseWorksheetPageSetup, Orientation, Margin, DefaultRowHeight, PaperWidthOverride и PaperHeightOverride |
| Растерен изход | Scale, ImageFormat и JpegQuality, като ExportObjectAsPNG изрисува един обект на чертожа в собствено PNG |
| Плътни диапазони | ExportRange изрисува класически или XLSX диапазон като едно плътно растерно изображение — без хартия, полета, колонтитули, заглавия за печат или краища на страници |
| Събития на платното | BeforeRenderPage се изпълнява след изчистването на фона, а AfterRenderPage — след чертожа на работната книга, но преди кодирането; PNG, JPEG и TIFF кадрите споделят една и съща пътека на събитията |
| Състояние | Active, Aborted, TotalPageCount, PageCount и ExportedPageCount |
PDF с тагове и PDF/A
TXLSPDFExport.TagMode включва автоматична структура на документа, таблиците, редовете, клетките на заглавката, клетките с данни и информативните изображения — с плътни идентификатори на маркирано съдържание, локални за страницата, точни картировки на дървото на родителите, обхванати сливени клетки и изолация на артефакти; редовете за заглавие при печат и редовете на заглавката на таблицата стават семантични клетки на заглавката, XLSX изображения с непразен AltText стават независими Figure елементи с алтернативен текст в Unicode, а изображенията без алтернативен текст остават декоративни артефакти
Всяка видима инстанция на информативно изображение получава собствен Figure елемент и идентификатор на маркирано съдържание, дори когато еднакви образни товари споделят един PDF XObject; AltTextTitle не замества липсващ алтернативен текст, диаграмите остават артефакти, и тази фокусирана поддръжка на структура не твърди пълно съответствие с PDF/UA
TXLSPDFExport.PDFAProfile избира PDF/A-1, PDF/A-2 или PDF/A-3 на ниво на съответствие a или b; несъвместимо шифроване, шрифтове, прикачени файлове, прозрачност, подписи и метаданни се валидират, преди изходният поток да бъде финализиран
TXLSPDFExport.ExportCommentsAsAnnotations поставя текстовете на автор и коментар в Unicode върху правоъгълниците на произходните клетки, докато традиционният изход с коментари в края остава независимо конфигурируем
UsePDFA е превключвателят за съвместимост с PDF/A-1b, докато UseXRefStream избира потоци за кръстосани препратки, където избраният профил го позволява
Геометрия и избор на страница
Шестте претоварвания на CalculatePageCount приемат класически и XLSX диапазони, работни листове или работни книги, без да изграждат PDF обекти
PaperWidth и PaperHeight заместват размерите на хартията в точки, LastPage затваря изходния интервал, броен от едно, Orientation (тип TXLSPDFOrientation) избира портретен или пейзажен изход, HidePrintObjects (множество от TXLSPDFHidePrintObject: xlsPdfHideHeaders, xlsPdfHideFooters) потиска избрани ленти на горния или долния колонтитул, а PageLayout (тип TXLSPDFPageLayout) задава началното подреждане на страниците в зрителя
Режим на страниците и действие при отваряне на PDF
TXLSPDFExport.PageMode (тип TXLSPDFPageMode) задава как PDF зрителят подрежда панелите при отваряне на документа — чрез xlsPdfModeDefault, xlsPdfModeUseOutlines, xlsPdfModeUseThumbs, xlsPdfModeFullScreen, xlsPdfModeUseOC и xlsPdfModeUseAttachments
OpenAction (тип TXLSPDFOpenAction) избира началното поведение на зрителя с xlsPdfOpenNone, xlsPdfOpenPage или xlsPdfOpenOutlines. При xlsPdfOpenPage OpenActionPage е целевата страница, броена от едно (стеснена до броя на страниците), а OpenActionZoom е началният коефициент на увеличение, където 0 запазва увеличението или пасването по подразбиране на зрителя
Споделена адаптивна векторна геометрия
XLSBuildEllipticArcCubics превръща елиптична дъга в кубични Безие сегменти, рекурсивно налагайки граница на плоскостта, избрана от извикващия; PDF, SVG и растерното рендиране използват тази споделена геометрия, така че големи или силно ексцентрични дъги получават повече сегменти, без да се наказват простите дъги
XLSDecodeVectorScene валидира EMF и WMF заглавки, подравняване и размери на записите, обявените общи броеве, точното поставяне на EOF и ограниченията за ресурси, без да извиква системното възпроизвеждане на метафайлове; вградената бял списък възпроизвежда стековете на състоянието на контекста на устройството със запазване и възстановяване, съпоставяне на прозореца и изгледа в комбинация със световни трансформации, таблици с обекти за моливи, четки и разширени моливи, включително стандартни обекти, правоъгълници, елипси, вериги от линии, многоъгълници, начупени линии и Безие криви с щрихови стилове, скоби на пътища със запълване, очертание и комбинирани преминавания и за двете, заоблени правоъгълници, дъги, тетиви, кръгови сектори и ъглови дъги през точно преобразуване на дъга в Безие, запълвания и контури на области от ограничени правоъгълници от RGNDATA, ограничени текстови порции с шрифтове, цветове и подравняване, и ограничени stretch-DIB изображения, прекодирани като PNG през Canvas и SVG; отхвърля escape записите и оставя изрязването и частните записи на съществуващия ограничен резервен път
Контури на PDF и callback-ове за страници
Контурите на PDF живеят в колекцията Bookmarks (тип TXLSPDFBookmarks): Add и AddForSheet добавят записи, Delete премахва един, а Count с Items обхождат дървото. Всеки запис TXLSPDFBookmark поддържа родителски и детски записи (Children), вериги от братски елементи, заглавия в Unicode, цветове (Color), целева PageNumber, изходния SheetName за отметки на работни листове и флагове за удебелен или курсив (множество от TXLSPDFBookmarkStyle: xlsPdfBookmarkBold, xlsPdfBookmarkItalic), плюс разгърнати или свити низходящи елементи; автоматичните отметки на работни листове използват същия модел на йерархия, а AutoSheetBookmarks превключва генерирането им
BeforeNewPage може да нагласи всяка кутия на страница, а BeforeGeneratePage и AfterGeneratePage чертаят фонове или насложено съдържание през публичните помощници за страници AppendPageContent, FillPageRectangle, StrokePageRectangle и DrawPageText
Подписи и прикачени файлове
TXLSPDFSignature конфигурира видими или невидими полета за подпис, а CertificationPolicy по желание създава сертификационен подпис DocMDP, който разрешава никакви промени, попълване на форми и подписване, или попълване, подписване и анотации; PDF/A-1 не допуска тази възможност от PDF 1.5 и тя се отхвърля, преди изходът да бъде финализиран
TXLSPDFCertificationPolicy предоставя xlsPdfApprovalSignature, xlsPdfCertifyNoChanges, xlsPdfCertifyFormFillingAndSigning и xlsPdfCertifyFormFillingSigningAndAnnotations за явен избор на политиката на подписа
TXLSPDFSignDigestEvent получава дайджеста и връща създадени от хоста CMS данни, така че HotXLS никога няма нужда от частен ключ
TXLSPDFExport.Signature прикачва конфигурацията на подписа, а профилите PDF/A-3 могат да включат валидирани придружаващи файлове чрез AddAttachment, който слага на опашка TXLSPDFAttachment; подробното претоварване приема име за показване в Unicode, MIME тип, описание, време на промяна, товар и стойност на TXLSPDFAttachmentRelationship — Source, Data, Alternative, Supplement или Unspecified, докато AttachmentCount отчита общия брой на опашката, а AttachmentDuplicatePolicy (тип TXLSPDFAttachmentDuplicatePolicy) избира как се обработват еднакви имена
TXLSPDFSignature.ImageData, ImageFormat и ImageFit (тип TXLSPDFSignatureImageFit: contain, cover или stretch) поставят PNG в нормалната явяваща се Form, преди байтовият диапазон да се замрази; режимите contain, cover и stretch споделят кеша с изображения на документа, а невалидни изображения се провалят преди подписването
Претоварването с IXLSPDFAttachmentSource остава мързеливо до запис, извиква всеки източник по веднъж на запис и буферира най-много 256 MiB, преди да създаде обекта EmbeddedFile, така че провал на доставчика оставя транзакцията към дестинацията непроменена
Финалният сглобъ записва обектите последователно към дестинацията, вместо да строи един цялостен низ за документа: неизписаните експорти се лият прав в потоци само напред, всеки EmbeddedFile сочи размера си в байтове чрез индиректен обект /Length, издаден след товара, а байтовете на доставчика се копират от буфера на фиксираните порции; подписаните експорти се сглобяват в ограничен буфер за документа, който получава корекциите на ByteRange и на съдържанието на подписа, инкрементален SHA-256 върху двата обхванати диапазона и едно копиране напред
PDF/A-3 изходът записва всеки придружаващ файл и в дървото с имена EmbeddedFiles, и в AF масива на каталога, с име UF в Unicode, екраниран PDF Name на MIME-а, AFRelationship, размер в байтове, факултативна дата на промяна и факултативно описание; PDF/A-1 и PDF/A-2 отхвърлят прикачените файлове на опашката, преди финализиране на изхода
Метаданни на документа
DocumentTitle, DocumentAuthor, DocumentSubject, DocumentKeywords и DocumentFileName попълват речниците за информация и метаданни на PDF
Резервни шрифтове
TXLSPDFExport.SetFontFallbackChain, AddFontFallback и ClearFontFallbackChains конфигурират нива на резервни шрифтове по изходно семейство и стил; LoadedFallbackFontCount показва броя кеширани лица, а FontFallbackSelectionCacheCount — броя кеширани решения за избор на резервен шрифт по отделните заявки, и двете за диагностика
TXLSPDFExport.FontSize задава размера на текста по подразбиране в точки, като по подразбиране е 9
Изборът на резервен шрифт използва покритието на глифовете и запазва Unicode съпоставянията, допълнителните скалари, графемните клъстери, shaping клъстерите и самостоятелните TTC лица
OnGetFontDirectories може да върне една или повече директории за шрифтове, разделени с точка и запетая, за поискано семейство и стил; приетите директории се обхождат рекурсивно веднъж, индексират се по вътрешната метаданна за семейство/стил и се кешират за последващи измервания и чертаене
Политика за вграждане на шрифтове
TXLSPDFExport.FontEmbedding (тип TXLSPDFFontEmbedding) избира автоматично вграждане, задължително подмножество, пълната шрифтова програма или изход само с таблица с знаци чрез xlsPdfFontEmbedAuto, xlsPdfFontEmbedSubset, xlsPdfFontEmbedFull и xlsPdfFontEmbedNone; задължителното подмножество се проваля атомично, когато не може да се произведе валидно подмножество, TTC лицата се превръщат в самостоятелни шрифтове, а PDF/A отхвърля изхода само с таблица с знаци
OnFontEmbed се задейства веднъж на Unicode лице, преди метриките, таблицата със знаци, shaping-ът и идентификаторите на глифовете да се разчетат; задаването на Handled приема върнатия режим за отделния шрифт и факултативните заместващи байтове, а оставянето на false запазва политиката на документа и оригиналното лице
Самостоятелни OpenType шрифтове с CFF контури се вграждат през FontFile3 с поток OpenType и низходящ CIDFontType0; автоматичният и пълният режим запазват програмата изцяло, а задължителното CFF подмножество се проваля атомично, защото не може да запази валидно подмножество
Вградените шрифтове с OpenType GPOS или наследени kern данни използват позиционирани премествания на глифовете за прост и сложен текст, така че измерването, пренасянето, подравняването и издадените позиции на глифовете споделят един и същ резултат от кернинга
Напредък и отмяна
TXLSPDFExport.OnProgress и OnProgressEx отчитат фазите начало, страница и край; Cancel изисква отмяна, а Aborted отчита крайното състояние, без да финализира частичен поток