HotXLS 文档

高级渲染与导出

PDF、SVG、位图、图元文件、预览和打印路径共用同一个分页模型及后端无关的几何信息,同时保留各格式专有的编码器

自定义图形后端

TXLSGraphicsTextAlign 为 TXLSGraphicsBackend定义左对齐、居中和右对齐的文本对齐方式;带样式的绘制调用则使用其余共享枚举——字体样式(TXLSGraphicsFontStyles)、线帽(TXLSGraphicsLineCap)、虚线样式(TXLSGraphicsLineDash)和垂直文本对齐(TXLSGraphicsTextVAlign)

Page lifecycleBeginPage 和 EndPage
PrimitivesFillRect、 StrokeRect、 DrawLine、 DrawStyledLine、 DrawEllipse、 DrawPath、 DrawText、 DrawStyledText、 DrawCellText和 DrawImage
Pagination entry pointTXLSPaginationModel.RenderPageToBackend 将一个逻辑页面发送到任意后端实现

实现会收到以点为单位的坐标、已解析的文本和图像效果、裁剪信息以及页面局部的绘制位置,无需重复实现工作簿布局逻辑。逻辑页面上的每个绘图都以 TXLSPageDrawingPlacement 记录的形式到达,其 Kind (TXLSPageDrawingKind: xpdkImage、 xpdkChart、 xpdkTextBox、 xpdkShape、 xpdkControl)告诉后端正在绘制的是什么;工作表背景图块则以解码后的 TXLSSheetBackgroundRenderData

由操作持有的渲染几何信息

TXLSPaginationModel.RenderBackend 选择下一次 Build 调用捕获的后端标识, RenderGeometry 则公开由此产生的不可变校准信息、工作簿代次、后端和受限的度量缓存状态;活动渲染会话以 TXLSRenderSession 句柄的形式传递,颜色策略则是 TXLSRenderColorMode (xlsrcColor 或 xlsrcMonochrome)

PDF 模型使用 xlsrgbPdf,SVG 使用 xlsrgbSvg,页面图像使用 xlsrgbBitmap,打印和打印预览模型使用 xlsrgbPrintPreview, TXLSWorkbookViewer 使用 xlsrgbViewer;SVG、图像、打印和查看器组件上的 PaginationModel 会公开活动模型以供诊断,但不转移其所有权

Classic 和 XLSX 的 HTML 入口会捕获 xlsrgbHtml; TXLSHTMLExport.RenderGeometry 公开最近的 Classic 快照,而 TXLSXHtmlExportSession.RenderGeometry 公开增量导出中跨所有工作表保留的快照

HTML 列输出会先通过 Normal 字体的最大数字宽度和已配置的屏幕缩放换算工作簿字符宽度模型,再输出固定的 CSS 像素长度;点和像素的转换使用同一份捕获的测量 DPI

每个操作都会保留它所捕获的校准信息,即使工作簿后来变更也不受影响,渲染也绝不会写入工作表的行高或列宽。分页基于 TXLSLogicalPage 对象构建页面,其中的绘图、方向(TXLSPageOrientation: xpoPortrait 或 xpoLandscape)和批注位置(TXLSPrintComments: xpcNone 或 xpcAtEnd)都来自解析后的页面设置

逻辑页面会公开后端或回调所需的一切:标识信息(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 自己的页眉渲染效果

原生分页中的合并单元格

TXLSPaginationModel.RenderPageToBackend 把合并区域解析到其原始锚点,并为每个页面片段绘制一个可见矩形;被覆盖的单元格不会输出重复文本或内部网格线

XLSX 片段共享锚点的填充、对齐、换行、字体和条件格式求值,而显式的外部边框段保持可见,内部合并边框被抑制;经典片段经由既有的经典文本绘制器共享锚点的文本和纯色填充

打印区域或分页符可以裁剪合并区域,即使锚点位于打印区域之外,每个可见片段也使用原始锚点;隐藏的行列贡献零范围,重复打印标题片段使用同样的锚点策略

合并不会强行把区域压到一页上,不扩展打印区域,也不改变存储的行高列宽;分页保留既有页面设置,并把每个片段裁剪到其逻辑页面

工作表背景渲染

工作簿查看器会将有效的 Classic 和 XLSX 工作表背景显示为未填充单元格后方的重复平铺图块,显式和条件单元格填充仍位于背景之上

TXLSPaginationModel、 TXLSSvgExport、 TXLSPageImageExporter、 TXLSPrintDocument、 TXLSPDFExport、 TXLSHTMLExport、 TXLSXHtmlExportOptions和 TXLSWorkbookViewer 都公开 ExportSheetBackgroundImages;打印、预览、图元文件、PDF、SVG、位图和 HTML 输出的默认值为 False 。工作表以 TXLSSheetBackgroundFormat 图像格式存储其负载,解码后的字节则以 TXLSSheetBackgroundResource 的形式按代次、DPI 和颜色模式为键传递

已启用的分页输出会跨页面边界把图块相位锚定在工作表坐标上,并在渲染会话中针对每个工作表、资源代次、后端、DPI 和颜色模式保留一张已解码图像; BackgroundDecodeCount 公开解码总数以供诊断,损坏的有效负载会被跳过并向工作簿添加诊断信息。活动的 TXLSRenderSession 自己管理这个共享缓存: AcquireBackground 获取(或只解码一次)工作表的平铺 TXLSSheetBackgroundRenderData , DrawTiledBackground 把它绘制到经过裁剪的页面区域, DecodeCount 报告到目前为止已解码的负载数量

工作簿对象显示策略

ObjectDisplayMode 可为 Classic XLS 和 XLSX 工作簿选择 xlsodmShowAll、 xlsodmShowPlaceholders或 xlsodmHideAll ;查看器会处理全部三种状态,并在占位符模式下使用开销很低的类型、名称、文本和替代文本框

PDF、SVG、位图、物理打印和 XLSX HTML 导出器默认将占位符模式当作完整对象输出;在相应的导出器或 HTML 选项上设置 ExportObjectPlaceholders ,即可请求不解码图像或构造图表场景的方框

xlsodmHideAll 是一个更早生效的全局开关,会阻止收集绘图、由对象驱动的范围扩展、命中测试和媒体渲染;工作表背景、条件格式图标、页眉或页脚图片、单元格及导出器专有的打印对象筛选仍彼此独立

刷新图表来源数据

XLSX 图表序列化和共享图表渲染会对照当前工作簿世代解析本地系列缓存,因此在输出之前,来源单元格编辑、重新计算和可见性变化都会刷新值、类别、气泡尺寸和与区域关联的系列名称

普通来源区域必须是本地 A1 引用的单行或单列;支持带引号的工作表名称,未限定范围的区域会对照图表所属工作表解析;分层类别级别保留其独立的矩形区域解析器

类别文本使用格式化后的单元格文本,数值缓存为空白和非数值文本保留空点位槽,错误单元格保留其显示的错误字面量,日期使用工作簿的 1900 或 1904 序列体系; PlotVisibleOnly 决定是否省略隐藏的来源行列

当本地来源从未被具体化时,导入或手动填充的缓存会被保留,而已经由本地单元格管理的缓存会在删除后清除过期点位; TXLSXChartSeries.RefreshDataCaches 显式刷新可解析的本地来源,包括空的来源区域

外部工作簿引用和不受支持的引用表达式保留其存储的缓存;缓存刷新不打开外部文件,也不发起网络请求

感知日历的图表日期轴

TXLSXChartSeries.ResolveDataCaches 为当前世代解析受支持的本地系列来源, RefreshDataCaches 即使在空来源没有单元格历史时也请求显式刷新

类别轴使用 xlsxAxisDate 的 XLSX 图表会通过工作簿的 1900 或 1904 日期序列系统映射每个有效类别,并保留稀疏日期之间的真实距离,而不是分配等距的点位

BaseTimeUnit 控制按日、月或年归一化, MajorUnit、 MinorUnit、 MajorTimeUnit和 MinorTimeUnit 则按日历单位推进刻度;因此月份和年份的间隔会在长短不一的月份及闰年中保持对齐

同一个受限刻度集合为基于分页的 PDF、SVG、位图、预览、打印和查看器输出提供坐标、标签、刻度和所请求的网格线,XLSX HTML 则为内联图表 SVG 使用共享的日历运算

独立 PDF 写入器

TXLSPDFWriter 创建不源自工作簿的 PDF 文档,例如发票、票据、标签和叠加表单; BeginDoc 设置点精度的页面框, NewPage 关闭当前页面, SaveToStream 或 SaveToFile 完成文档

绘图方法使用相对于左下角的 PDF 点和 $00BBGGRR 或 $AABBGGRR 形式的库颜色;可用图元包括 FillRectangle、 StrokeRectangle、 ClipRectangle、 MeasureText、 SaveGraphicsState和 RestoreGraphicsState ,用于填充及描边矩形、直线、椭圆、可精确测量宽度的样式化文本、仿射变换、矩形裁剪以及显式保存或恢复图形状态,而 PageWidth 和 PageHeight 则以点报告当前页面框

SVG 导出

TXLSSvgExport 为 Classic 和 XLSX 的范围、工作表、工作簿及已准备的逻辑页面提供七个 SaveAsSVG 重载,并在支持时提供命名对象输出

UseWorksheetPageSetup、 Orientation和 Margin 与 PDF 和预览输出采用相同的页面设置决策

TXLSSvgExport.PrintComments (类型 TXLSPrintComments)选择如何为分页 SVG 输出单元格批注;设为 xpcAtEnd时,工作表最后一页会在数据区域下方追加批注列表(单元格地址、作者和文本),而 xpcNone 会省略批注

ExportPages 通过 OnPage每次发送一份完整 SVG 文档,通过 ExportedPageCount报告已提交的页数,并会在回调取消后停止生成后续页面; IdPrefix 为裁剪路径、滤镜、图案和共享资源创建确定性的文档与页面命名空间

HyperlinkMode (类型 TXLSSvgHyperlinkMode)设为 xshmSafe 时,会在可视内容之后添加经过裁剪的透明命中区域;允许的外部协议包括 HTTP、HTTPS、mail、FTP 和相对链接,而活动、本地、UNC 及包含控制字符的目标会被省略; LinksInNewWindow 会添加 noopener noreferrer 保护,ScreenTip 则成为 SVG 标题

增量式 PNG、JPEG 与多页 TIFF 输出

TXLSPageImageFormat 选择 PNG 或 JPEG 输出, TXLSPageImageExporter 会保持一个分页会话处于活动状态,同时及时释放每个已完成的位图

Session六个 BeginExport 重载接受 Classic 或 XLSX 的范围、工作表和工作簿; ExportNext 写入一页, EndExport 释放会话
Multipage TIFFExportAllAsTiff 将选定的逻辑页面以一个 LZW 压缩 TIFF 写入流或文件,同时保留进度、取消和目标原子性语义
Page setupUseWorksheetPageSetup、 Orientation、 Margin、 DefaultRowHeight、 PaperWidthOverride和 PaperHeightOverride
Raster outputScale、 ImageFormat和 JpegQuality,而 ExportObjectAsPNG 会将单个绘图对象渲染为归其所有的 PNG
Compact rangesExportRange 将 Classic 或 XLSX 范围渲染为一个紧凑光栅图,不包含纸张、页边距、页眉、页脚、打印标题或分页符
Canvas eventsBeforeRenderPage 在清除背景后运行, AfterRenderPage 在绘制工作簿后且编码前运行;PNG、JPEG 和 TIFF 帧共用相同的事件路径
StateActive、 Aborted、 TotalPageCount、 PageCount和 ExportedPageCount

带标签 PDF 和 PDF/A

TXLSPDFExport.TagMode 启用自动的文档、表格、行、表头单元格、数据单元格及信息性图片结构,并提供稠密的页面局部标记内容标识符、精确的父树映射、合并单元格跨度和工件隔离;打印标题行和表头行会成为语义表头单元格, AltText 非空的 XLSX 图片会成为带有 Unicode 替代文本的独立 Figure 元素,没有替代文本的图片仍是装饰性工件

每个可见的信息性图片实例都会获得自己的 Figure 元素和标记内容标识符,即使相同的图像有效负载共用一个 PDF XObject; AltTextTitle 不会替代缺失的替代文本,图表仍为工件,且这项聚焦的结构支持并不宣称完全符合 PDF/UA

TXLSPDFExport.PDFAProfile 在一致性级别 a 或 b 下选择 PDF/A-1、PDF/A-2 或 PDF/A-3;不兼容的加密、字体、附件、透明度、签名和元数据会在提交输出流前得到验证

TXLSPDFExport.ExportCommentsAsAnnotations 将 Unicode 作者和批注文本放在来源单元格的矩形上,而传统的页末批注输出仍可独立配置

UsePDFA 是 PDF/A-1b 的兼容性开关, UseXRefStream 则在选定配置文件允许时选择交叉引用流

页面几何信息和选择

六个 CalculatePageCount 重载接受 Classic 和 XLSX 的范围、工作表或工作簿,无需构建 PDF 对象

PaperWidth 和 PaperHeight 以点覆盖纸张尺寸, LastPage 结束从一开始计数的输出区间, Orientation (类型 TXLSPDFOrientation)选择纵向或横向输出, HidePrintObjects ( TXLSPDFHidePrintObject集合: xlsPdfHideHeaders、 xlsPdfHideFooters)隐藏选定的页眉或页脚带区, PageLayout (类型 TXLSPDFPageLayout)设置查看器的初始页面排列

PDF 页面模式和打开操作

TXLSPDFExport.PageMode (类型 TXLSPDFPageMode)通过 xlsPdfModeDefault、 xlsPdfModeUseOutlines、 xlsPdfModeUseThumbs、 xlsPdfModeFullScreen、 xlsPdfModeUseOC和 xlsPdfModeUseAttachments

OpenAction (类型 TXLSPDFOpenAction)使用 xlsPdfOpenNone、 xlsPdfOpenPage或 xlsPdfOpenOutlines选择查看器的初始行为。对于 xlsPdfOpenPage, OpenActionPage 是从一开始计数的目标页面(会限制到页面数内), OpenActionZoom 是初始缩放系数,其中 0 保留查看器默认缩放或适应方式

共享的自适应矢量几何信息

XLSBuildEllipticArcCubics 通过递归满足调用方选择的平坦度上限,将椭圆弧转换为三次 Bezier 段;PDF、SVG 和位图渲染使用这一共享几何信息,因此大型或高偏心率圆弧会获得更多分段,而简单圆弧不会受到额外负担

XLSDecodeVectorScene 验证 EMF 和 WMF 的头、记录对齐与大小、声明总量、精确 EOF 位置及资源限制,不调用平台图元文件回放;原生白名单会回放设备上下文状态栈及其保存和恢复、窗口和视口映射与世界变换的组合、包含库存对象的画笔、画刷和扩展画笔对象表、矩形、椭圆、线链、多边形、折线和带虚线样式的 Bézier 曲线、包含填充、描边及描边加填充过程的路径括号、圆角矩形、通过精确圆弧到 Bézier 转换实现的圆弧、弦、扇形和角圆弧、由受限 RGNDATA 矩形构成的区域填充和边框、包含字体、颜色和对齐方式的受限文本运行,以及经由 Canvas 和 SVG 重新编码为 PNG 的受限拉伸 DIB 图像;它会拒绝 escape 记录,并将裁剪和私有记录留给现有的受限回退路径

PDF 大纲和页面回调

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 ,以显式选择签名策略

A TXLSPDFSignDigestEvent 会接收摘要并返回由主机创建的 CMS 数据,因此 HotXLS 无需私钥

TXLSPDFExport.Signature 附加签名配置,PDF/A-3 配置文件可通过 AddAttachment包含已验证的关联文件,该操作会把 TXLSPDFAttachment加入队列;详细重载接受 Unicode 显示名称、MIME 类型、说明、修改时间、有效负载,以及值为 Source、Data、Alternative、Supplement 或 Unspecified 的 TXLSPDFAttachmentRelationship ; AttachmentCount 报告已排队的总数, AttachmentDuplicatePolicy (类型 TXLSPDFAttachmentDuplicatePolicy)选择重名的处理方式

TXLSPDFSignature.ImageData、 ImageFormat和 ImageFit (类型 TXLSPDFSignatureImageFit:contain、cover 或 stretch)会在字节范围冻结前,将 PNG 放入普通外观 Form;contain、cover 和 stretch 模式共用文档图像缓存,无效图像会在签名前失败

The IXLSPDFAttachmentSource 重载在保存前保持惰性,每次保存调用每个源一次,并在创建 EmbeddedFile 对象前最多假脱机 256 MiB,因此提供程序失败不会改变目标事务

最终装配会将对象按顺序写入目标,而不构建一个完整文档字符串:未签名导出直接流入只进流,每个 EmbeddedFile 通过在有效负载后输出的间接 /Length 对象引用其字节大小,提供程序字节以固定块从假脱机区复制;已签名导出会装配到受限文档假脱机区,该区域接收 ByteRange 和签名内容补丁、两个覆盖区间上的增量 SHA-256 以及一次只进复制

PDF/A-3 输出会将每个关联文件同时写入 EmbeddedFiles 名称树和目录 AF 数组,其中包含 Unicode UF 名称、已转义的 MIME PDF Name、 AFRelationship、字节大小、可选修改日期和可选说明;PDF/A-1 和 PDF/A-2 会在提交输出前拒绝已排队的附件

文档元数据

DocumentTitle、 DocumentAuthor、 DocumentSubject、 DocumentKeywords和 DocumentFileName 填充 PDF 信息和元数据字典

字体回退

TXLSPDFExport.SetFontFallbackChain、 AddFontFallback和 ClearFontFallbackChains 配置源字体族和样式专用的回退层级; LoadedFallbackFontCount 公开已缓存的字体面数量, FontFallbackSelectionCacheCount 公开按选择缓存的回退决策数量,两者都用于诊断

TXLSPDFExport.FontSize 以点设置默认文本大小,默认值为 9

回退选择使用字形覆盖范围,并保留 Unicode 映射、补充平面标量、字素簇、塑形簇和独立 TTC 字体面

OnGetFontDirectories 可为请求的字体族和样式返回一个或多个以分号分隔的字体目录;接受的目录会递归搜索一次,按内部字体族和样式元数据建立索引,并为后续测量和绘制缓存

字体嵌入策略

TXLSPDFExport.FontEmbedding (类型 TXLSPDFFontEmbedding)通过 xlsPdfFontEmbedAuto、 xlsPdfFontEmbedSubset、 xlsPdfFontEmbedFull和 xlsPdfFontEmbedNone选择自动嵌入、必须子集化、完整字体程序或仅映射输出;无法生成有效子集时必须子集化会原子失败,TTC 字体面会转换为独立字体,PDF/A 会拒绝仅映射输出

OnFontEmbed 会在解析 Unicode 字体面的度量、字符映射、塑形和字形标识符前对每个字体面触发一次;设置 Handled 会接受返回的按字体模式及可选替换字节,保持为 false 则保留文档策略和原始字体面

具有 CFF 轮廓的独立 OpenType 字体会通过带 FontFile3 流和 OpenType 后代的 CIDFontType0 嵌入;自动和完整模式保留完整程序,而必须 CFF 子集化会原子失败,因为它无法保留有效子集

带有 OpenType GPOS 或旧版 kern 数据的嵌入字体会为简单和复杂文本使用已定位的字形前进量,因此测量、换行、对齐和输出的字形位置共享同一字距调整结果

进度和取消

TXLSPDFExport.OnProgress 和 OnProgressEx 报告开始、页面和结束阶段; Cancel 请求取消, Aborted 报告最终状态,且不会提交部分流

另请参阅